所以,我有这个活动,里面有关于listview的标签,我面临的问题是:
第一和第二标签具有相同的内容,即第二标签应具有的内容在第一和第二标签中。
第三个选项卡具有正确的内容,但这是因为它最初只实例化第一个和第二个选项卡。
我设置时
mViewPager.setOffscreenPageLimit(2);
所有三个标签都有相同的内容,这是第三个标签的内容。
但是在我滚动到第三个标签然后滚动回第一个标签后,第一个标签刷新并且内容正确。
此外,下一个问题是第二个选项卡永远不会刷新,因为它始终在打开的选项卡的右侧或左侧。 我希望每次打开时都会刷新标签,因为我会不断更改列表中的材料。
package com.towntrot.anil.towntrot_eventmanager_02;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class SlidingTabsBasicFragment extends Fragment {
ListView list;
public ArrayList<ListModel> CustomListViewValuesArr = new ArrayList<ListModel>();
public guestlist gg;
private SlidingTabLayout mSlidingTabLayout;
private ViewPager mViewPager;
private String[] eventtype={"CHECKED IN","CHECKED OUT","WAITING"};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_sample, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
mViewPager.setAdapter(new SamplePagerAdapter());
mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
mSlidingTabLayout.setViewPager(mViewPager);
}
class SamplePagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return 3;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return o == view;
}
@Override
public CharSequence getPageTitle(int position) {
return eventtype[position];
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = getActivity().getLayoutInflater().inflate(R.layout.pager_item,
container, false);
guestlist gg=(guestlist)getActivity();
StringBuilder sb = new StringBuilder();
sb.append("");
sb.append(position);
String strI = sb.toString();
Toast.makeText(getActivity(),strI,Toast.LENGTH_LONG).show();
setListData(gg.getNamelist(), gg.getStatuslist(), gg.getNo0fPeople(), position);
list= ( ListView )view.findViewById(R.id.list);
CustomAdapter adapter;
adapter=new CustomAdapter( getActivity(), CustomListViewValuesArr);
list.setAdapter(adapter);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
public void setListData(String[] string,String[] status,int no,int pos) {
CustomListViewValuesArr.clear();
for (int i = 0; i < no; i++) {
final ListModel name = new ListModel();
int x=Integer.parseInt(status[i]);
if(pos==x){ name.setCompanyName(string[i]);
CustomListViewValuesArr.add(name);}
}
}
}
请帮助我,我已经看到很多答案,但无法解决这个问题。任何帮助表示赞赏。
答案 0 :(得分:0)
问题是,每当寻呼机项被实例化时,您都在调用setListData
,而后者又会使用给定位置的数据填充CustomListViewValuesArr
。然后你的列表适配器直接使用这个数组,因为它在你的片段中定义,并且根据最后一个实例化的项目,它的内容会发生变化。
将CustomListViewValuesArr
更改为本地变量;在ArrayList<ListModel>
方法中创建一个新的setListData
对象并将其返回,使用返回的对象作为CustomAdapter
构造函数参数。