[英]Please help me with Instance
I have two buttons "start hotel1" and "start hotel2". 我有两个按钮“ start hotel1”和“ start hotel2”。 when you click on them, I create a fragment in which ViewPager: 当您单击它们时,我在其中创建了一个ViewPager片段:
public class PagerContainer extends Fragment {
static final int PAGE_COUNT = 2;
private String hotel;
public PagerContainer(String hotel) {
this.hotel = hotel;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.pager_container, null);
ViewPager pager = (ViewPager) v.findViewById(R.id.pager);
PagerAdapter pagerAdapter = new MyFragmentPagerAdapter(getActivity().getSupportFragmentManager());
pager.setAdapter(pagerAdapter);
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
Log.d("LOG", "onPageSelected, position = " + position);
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
return v;
}
private class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return CalendarView.newInstance(position,hotel);
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public CharSequence getPageTitle(int position) {
return "title";
}
}
}
I load it in another fragment that takes different parameters, depending on the button: 我将其加载到采用不同参数的另一个片段中,具体取决于按钮:
public class CalendarView extends Fragment {
static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
static final String ARGUMENT_HOTEL = "arg_hotel";
private int pageNumber;
private String hotel;
static CalendarView newInstance(int page,String hotel) {
Log.d("myLOG","newInstance");
CalendarView calendarView = new CalendarView();
Bundle arguments = new Bundle();
arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
arguments.putString(ARGUMENT_HOTEL, hotel);
calendarView.setArguments(arguments);
return calendarView;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.calendar, null);
pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
hotel = getArguments().getString(ARGUMENT_HOTEL);
...
return v;
}
public class NewThread extends AsyncTask<String, Void, String> {
protected String doInBackground(String... strings) {
...
}
@Override
protected void onPostExecute(String s) {
....
}
}
}
First pressing any key data normally loaded. 首先按任何通常加载的键数据。 After they loaded I click on the second button, and I have an empty screen. 他们加载后,我单击第二个按钮,并且我有一个空白屏幕。 Log just says that the instance is not created. 日志只是说没有创建实例。 I need something to clean or rebuild? 我需要清洁或重建吗? how? 怎么样?
case CONFEENCE_GRUP_NODE:
Fragment conference;
switch (position2) {
case HOLIDAY:
conference = new PagerContainer("holiday");
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction().replace(R.id.content_frame, conference).commit();
break;
case CITY:
conference = new PagerContainer("city");
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction().replace(R.id.content_frame, conference).commit();
break;
}
break;
Don't ever override the Fragment
constructor, because they MUST have an empty constructor. 永远不要重写Fragment
构造函数,因为它们必须有一个空的构造函数。 Create the same newInstance
method in your PagerContainer
, and grab the parameter from it: 在您的PagerContainer
创建相同的newInstance
方法,并PagerContainer
获取参数:
private static final String ARGUMENT_PAGE_HOTEL = "arg_page_hotel";
public PagerContainer() {
}
public static PagerContainer newInstance(String hotel) {
PagerContainer container = new PagerContainer();
Bundle arguments = new Bundle();
arguments.putString(ARGUMENT_PAGE_HOTEL, hotel);
container.setArguments(arguments);
return container;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.pager_container, null);
hotel = getArguments().getString(ARGUMENT_PAGE_HOTEL);
...
return v;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.