在活动开始时使用listview为选项卡中的两个选项卡获取相同的列表

时间:2015-05-29 11:53:05

标签: android listview tabs

所以,我有这个活动,里面有关于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);}
    }
}


}

请帮助我,我已经看到很多答案,但无法解决这个问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

问题是,每当寻呼机项被实例化时,您都在调用setListData,而后者又会使用给定位置的数据填充CustomListViewValuesArr。然后你的列表适配器直接使用这个数组,因为它在你的片段中定义,并且根据最后一个实例化的项目,它的内容会发生变化。

CustomListViewValuesArr更改为本地变量;在ArrayList<ListModel>方法中创建一个新的setListData对象并将其返回,使用返回的对象作为CustomAdapter构造函数参数。