[英]TabLayout containing recyclerview lost information when swiping on another tab
我在 TabLayout 中有一個 RecyclerView,效果很好.. 我在 RecyclerView 中充滿了數據並且效果很好,但是當滑動到其他 Tab 並返回和前一個 Tab 時,recyclerView 中的數據消失了..我做錯了什么?
ScheduleAndGuestList.java
public class ScheduleAndGuestList extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
private TabItem tabSchedale,tabGuests;
private pageAdapter pagerAdapter;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_schedule_and_guest_list);
tabLayout =(TabLayout)findViewById(R.id.tableLayout);
tabSchedale=(TabItem)findViewById(R.id.tabSchedulePest);
tabGuests=(TabItem)findViewById(R.id.tabGuestsPest);
viewPager=findViewById(R.id.viewPager);
pagerAdapter=new pageAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(pagerAdapter);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if (tab.getPosition() == 0) {
pagerAdapter.notifyDataSetChanged();
} else if (tab.getPosition() == 1) {
pagerAdapter.notifyDataSetChanged();
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
viewPager.setOffscreenPageLimit(tabLayout.getTabCount());
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
}
}
tabSchedule.java
public class tabSchedule extends Fragment {
private String horaMin,stringDescrp;
private Button btn, seleccHora;
private EditText descrpEt;
private ImageView img1,img2;
private HorizontalScrollView scrollView;
private ArrayList<String> arrayHora,arrayDescrp;
private RecyclerView recyclerViewtab;
listScheduleAdapter adapter=new listScheduleAdapter(arrayHora,arrayDescrp);
public tabSchedule() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_tab_schedule, container, false);
btn = (Button) view.findViewById(R.id.button);
recyclerViewtab=(RecyclerView)view.findViewById(R.id.recyclerViewScheduleId);
arrayHora=new ArrayList<String>();
arrayDescrp=new ArrayList<String>();
//RecyclerView
recyclerViewtab.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false));
recyclerViewtab.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL));
adapter=new listScheduleAdapter(arrayHora,arrayDescrp);
recyclerViewtab.setAdapter(adapter);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final View view = LayoutInflater.from(getActivity()).inflate(R.layout.alertdialog_addschedule, null);
scrollView=(HorizontalScrollView)view.findViewById(R.id.scrollView);
img1=(ImageView)view.findViewById(R.id.img1);
img2=(ImageView)view.findViewById(R.id.img2);
//Selecionar hora
{
seleccHora = (Button) view.findViewById(R.id.seleccionarHoraSheduleId);
seleccHora.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar mcurrentTime = Calendar.getInstance();
int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
int minute = mcurrentTime.get(Calendar.MINUTE);
TimePickerDialog mTimePicker;
mTimePicker = new TimePickerDialog(getActivity(), new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
horaMin = String.format("%02d:%02d", selectedHour, selectedMinute);
seleccHora.setText(horaMin);
}
}, hour, minute, true);
mTimePicker.setTitle("Select Time");
mTimePicker.show();
}
});
}
img1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
img1.setBackgroundColor(Color.parseColor("#FF4081"));
Toast.makeText(getActivity(), "Works 1!", Toast.LENGTH_SHORT).show();
}
});
builder.setTitle("Agregar programacion");
builder.setPositiveButton("Agregar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
descrpEt=(EditText)view.findViewById(R.id.descripScheduleId);
stringDescrp=descrpEt.getText().toString();
arrayHora.add(horaMin);
arrayDescrp.add(stringDescrp);
adapter.notifyDataSetChanged();
}
}).setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setView(view);
builder.show();
}
});
return view;
}
}
頁面適配器.java
public class pageAdapter extends FragmentPagerAdapter {
private int numOfTabs;
public pageAdapter(@NonNull FragmentManager fm, int numOfTabs) {
super(fm);
this.numOfTabs = numOfTabs;
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new tabSchedule();
case 1:
return new tabGuests();
default:
return null;
}
}
@Override
public int getCount() {
return numOfTabs;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
請嘗試以下 MainActivity.java 上的源代碼
//create viewpageradaper class object
ViewPagerAdapter adapter=new ViewPagerAdapter(getSupportFragmentManager());
//adding fragments using adapter object
adapter.AddFragment(new FirstFragment(), "Home");
adapter.AddFragment(new SecondFragment(), "Friends");
adapter.AddFragment(new ThirdFragment(), "Group");
//set adapter into viewpager
viewPager.setAdapter(adapter);
//set viewpager into tablayout
tabLayout.setupWithViewPager(viewPager);
//set icon to tab items
tabLayout.getTabAt(0).setIcon(ICONS[0]);
tabLayout.getTabAt(1).setIcon(ICONS[1]);
tabLayout.getTabAt(2).setIcon(ICONS[2]);
ViewPagerAdapter 如下:
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragmentList=new ArrayList<>();
private final List<String> fragmentListTitles=new ArrayList<>();
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentListTitles.size();
}
//return page title
@Override
public CharSequence getPageTitle(int position) {
return fragmentListTitles.get(position);
}
public void AddFragment(Fragment fragment,String title)
{
fragmentList.add(fragment);
fragmentListTitles.add(title);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.