آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کاربا فرگمنت و ویوپیجر

mahdi  9 سال پیش  9 سال پیش
0 0

سلام.اگه بخوام از اکتیویتی به کنترل های داخل فرگمنت دسترسی داشته باشم باید چطوری این کار رو انجام بدم؟از inflater استفاده کردم بازم نشد

باید داخل pageradapter این کاررو انجام بدم؟

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Hajhosseini  9 سال پیش
0 0

سلام. یکم سوالتون کلیه و راه های خیلی زیادی هست. من چند راهو میگم هرکدوم مناسب بود بگید.
1- استفاده از متد زیر

 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {

}

@Override
public void onPageScrollStateChanged(int state) {

}
});

این متد به شما میگه کدوم فرگمنت سلکت شده، حالا شما میتونید پوزیشن مورد نظرتون رو به آداپتر پاس بدید و اون تغییرات رو اعمال کنه. اگر توی اداپترتون یک فرگمنت رو هربار میسازید، شاید جواب نده ولی اگر فرگمنت های مختلف رو میسازید خیلی مفیده.

2- روش رو عوض کنید، اگر میخواید با یک اتفاق از توی فرگمنت، کدی توی اکتیویتی انجام بشه، فقط کافیه توی اکتیویتی یک متد پابلیک بسازید و از توی فرگمنت به شکل زیر کال کنید. (متد حتما باید public باشه)

 ((MyActivity)getActivity()).onBackPressed();

اگر میخواید توی فرگمنت بدونید الان توی چه position ای هستید، 2 روش وجود داره. روش اول اینه که فرگمنت رو توی آداپتر به این شکل بسازید و پارامتر رو بهش پاس بدید:

توی آداپتر

 return MyFrag.newInstance(position);

توی فرگمنت:

 public static MyFrag newInstance(int pos) {
MyFrag fragment = new MyFrag();
Bundle args = new Bundle();
args.putSerializable("POSITION", pos);
fragment.setArguments(args);
return sectionSubFragment;
}

---------------------------------------

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (getArguments() != null) {
fragmentPosition = getArguments().getInt("POSITION");
}
}

راه دوم اینه که ایندکس فرگمنت رو بگیرید. برای این کار آداپتر حتما باید از FragmentPagerAdapter اکستندز شده باشه. اگر از State و ... استفاده کنید امکان داره null باشه. شما تگ رو میگیرید، کاراکتر های اخرش میشن پوزیشنش.

راه های زیادی هست. استفاده از استاتیک ها هم یک راه هست که من پیشنهاد نمیکنم. باز اگر این موارد مشکلتون رو حل نمیکرد دقیق بگید میخواید چه کاری انجام بدید، من راهنماییتون میکنم.

+1 0
ممنون از پاسختون.من یک فرگمنت دارم که داخلش یه تکست ویو هست واین فرگمنت رو توی همه صفحات ویوپیجر نشون میدم مثل یه تم.میخواستم یه سری اطلاعات رو از دیتابیس بخونم که مشکلی نداره ولی میخوام ببینم چطور میتونم به تکست ویو داخل فرگمنت دسترسی پیدا کنم و هر رکورد اطلاعاتی بانک رو توی یکی از صفحات ویو پیجر نشون بدم.تعداد فرگمنت هم بستگی به تعداد رکورد داخل بانک داره (9 سال پیش)
+1 0
خیلی خوب توضیح دادید. راه حل درست شما اینه که توی آداپتر، پوزیشن رو برای فرگمنت ارسال کنید. بعد توی فرگمنت بر اساس پوزیشن، دیتا رو از دیتابیس بگیرید. میتونه توی یه switch case باشه. موفق باشید. (9 سال پیش)
0 0
ممنون.یعنی باید داخل فرگمنت یه متد oncreateبزارم و داخلش پوزیشن رو با صدا زدن تابعی از آداپتور که پوزیشن رو میده بدست بیارم و بعد اطلاعات رو از دیتابیس بخونم و داخل تکست ویو نشون بدم.همینطوره؟یا منظورتون چیز دیگه ای؟ (9 سال پیش)
0 0
دقیقا منظور همینه. توی مثال دوم کل کدی که باید بنویسید رو نوشتم براتون (9 سال پیش)
0 0
خیلی خیلی ممنون.حل شد (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .