Android:Listview数据未更改内部视图寻呼机

Android:Listview数据未更改内部视图寻呼机,android,listview,android-viewpager,Android,Listview,Android Viewpager,我想在一个“选项卡式列表”中显示数据,这是一个视图分页器,每个页面内都有列表视图。为此,我使用了两个适配器,一个用于ViewPager,另一个用于listview。其实现中的问题是,当我切换页面时,listview数据没有改变。下面是代码 public class ALTabbedListAdapter extends PagerAdapter { protected Context mContext; protected ArrayList<String> or

我想在一个“选项卡式列表”中显示数据,这是一个视图分页器,每个页面内都有列表视图。为此,我使用了两个适配器,一个用于ViewPager,另一个用于listview。其实现中的问题是,当我切换页面时,listview数据没有改变。下面是代码

public class ALTabbedListAdapter extends PagerAdapter {

    protected Context mContext;

    protected ArrayList<String> originalTabsList = new ArrayList<>();
    public ArrayList<OEDataRow> filteredDataList = new ArrayList<>();
    public ArrayList<OEDataRow> originalDataList = new ArrayList<>();

    public String group_key;
    private int num_pages;

    public View mView;
    public ListView mListView;
    public  ALListViewAdapter listViewAdapter; // declared as an inner class below.

    public ALTabbedListAdapter(Context context, String type, ArrayList<String> groupkey_rows, ArrayList<OEDataRow> dataRows) {
        mContext = context;
        originalTabsList = groupkey_rows;
        group_key = type;
        originalDataList = dataRows;
        num_pages = groupkey_rows.size();
    }

    @Override
    public int getCount() {
        return num_pages;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return originalTabsList.get(position);
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        collection.removeView((View) view);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        mView = setupListView(position);// This function call sets up the listview and returns the view, defined below.
        container.addView(mView);
        return mView;

    }

    public ArrayList<OEDataRow> getListViewData(/*OEDataRow row*/String row, ArrayList<OEDataRow> originalDataListParam) {
        ArrayList<OEDataRow> dataRowArrayList = new ArrayList<>();
        for (OEDataRow dataRow : originalDataListParam) {
            if (Boolean.toString(dataRow.getBoolean(group_key)).equalsIgnoreCase(row)/*row.getString("name")*/) {
                dataRowArrayList.add(dataRow);
            }
        }
        return dataRowArrayList;
    }

    public View setupListView(int position) {
        View view= ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.tablayout_listview_layout, null);
        mListView = (ListView) view.findViewById(R.id.tablayout_listview);
        ArrayList<OEDataRow> finallist = getListViewData(originalTabsList.get(position)/*dataRow*/, originalDataList);
        if(listViewAdapter==null) {
            listViewAdapter = new ALListViewAdapter(finallist);
        } else {
            listViewAdapter.changeFilterData(finallist);
        }
        mListView.setAdapter(listViewAdapter);
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

            }
        });
        listViewAdapter.notifyDataSetChanged();
        return view;
    }


    public class ALListViewAdapter extends BaseAdapter {

        public View mListItemView;
        public LayoutInflater inflater;

        public ALListViewAdapter(ArrayList<OEDataRow> dataList) {
            changeFilterData(dataList);
            inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return filteredDataList.size();
        }

        public void changeFilterData(ArrayList<OEDataRow> dataList){
            if(filteredDataList != null) {
                filteredDataList.clear();
            }
            filteredDataList=dataList;
            this.notifyDataSetChanged();
        }

        @Override
        public Object getItem(int i) {
            return filteredDataList.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public void notifyDataSetChanged() {
            super.notifyDataSetChanged();
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {

            if(mListItemView == null) {
                mListItemView = inflater.inflate(R.layout.listitem, null);
            }
            //TODO How to make it extendable?
            OEDataRow row = filteredDataList.get(i);
            TextView tv_title = (TextView)mListItemView.findViewById(R.id.listitem_namefield);
            tv_title.setText(row.getString("name"));

            return mListItemView;
        }
    }
}
公共类ALTabbedListAdapter扩展了PagerAdapter{
保护上下文mContext;
受保护的ArrayList originAltabList=新ArrayList();
public ArrayList filteredatalist=new ArrayList();
public ArrayList originalDataList=new ArrayList();
公共字符串组密钥;
私有int num_页面;
公众视野;
公共列表视图;
public ALListViewAdapter listViewAdapter;//声明为下面的内部类。
公共ALTabbedListAdapter(上下文上下文、字符串类型、ArrayList groupkey_行、ArrayList数据行){
mContext=上下文;
OriginalTablesList=groupkey_行;
组键=类型;
原始催化剂=数据行;
num_pages=groupkey_rows.size();
}
@凌驾
public int getCount(){
返回num_页;
}
@凌驾
公共字符序列getPageTitle(int位置){
返回originalTabsList.get(位置);
}
@凌驾
公共布尔值isViewFromObject(视图,对象){
返回视图==对象;
}
@凌驾
公共项(视图组集合、int位置、对象视图){
collection.removeView((视图)视图);
}
@凌驾
公共对象实例化项(视图组容器,int位置){
mView=setupListView(position);//此函数调用设置listview并返回下面定义的视图。
container.addView(mView);
返回mView;
}
公共ArrayList getListViewData(/*OEDataRow行*/String行,ArrayList originalDataListParam){
ArrayList dataRowArrayList=新的ArrayList();
对于(OEDataRow数据行:originalDataListParam){
if(Boolean.toString(dataRow.getBoolean(group_key)).equalsIgnoreCase(row)/*row.getString(“name”)*/){
dataRowArrayList.add(dataRow);
}
}
返回dataRowArrayList;
}
公共视图设置列表视图(内部位置){
视图视图=((LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE)).inflate(R.LAYOUT.tablayout\u listview\u LAYOUT,null);
mListView=(ListView)view.findViewById(R.id.tablayout\u ListView);
ArrayList finallist=getListViewData(OriginalTablesList.get(position)/*dataRow*/,originalDataList);
如果(listViewAdapter==null){
listViewAdapter=新的ALListViewAdapter(finallist);
}否则{
listViewAdapter.changeFilterData(finallist);
}
setAdapter(listViewAdapter);
mListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
}
});
listViewAdapter.notifyDataSetChanged();
返回视图;
}
公共类ALListViewAdapter扩展了BaseAdapter{
公众视野;
公共场所;充气机;
公共ALListViewAdapter(ArrayList数据列表){
changeFilterData(数据列表);
充气器=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
@凌驾
public int getCount(){
返回filteredDataList.size();
}
公共无效changeFilterData(ArrayList数据列表){
if(filteredDataList!=null){
filteredDataList.clear();
}
filteredDataList=数据列表;
this.notifyDataSetChanged();
}
@凌驾
公共对象getItem(int i){
返回filteredatalist.get(i);
}
@凌驾
公共长getItemId(int i){
返回i;
}
@凌驾
public void notifyDataSetChanged(){
super.notifyDataSetChanged();
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
如果(mListItemView==null){
mListItemView=充气机。充气(R.layout.listitem,null);
}
//TODO如何使其可扩展?
OEDataRow行=filteredDataList.get(i);
TextView tv_title=(TextView)mListItemView.findViewById(R.id.listitem_name字段);
tv_title.setText(row.getString(“name”);
返回mListItemView;
}
}
}

你做错了。如果您想要基于选项卡的功能,请在ViewPager中对其进行管理,并在ViewPager中为每个屏幕生成不同的片段,然后在其中生成代码

如果您使用的是fragment方法,那么可以使用此方法刷新listview

    @Override
        public void setMenuVisibility(boolean menuVisible) {
            super.setMenuVisibility(menuVisible);
            if(menuVisible)
                yourListView.notifyDataSetChanged();
        }

当片段出现在可见区域时,此方法调用调用。

如果要为所有视图页导航视图仅创建一个适配器实例,则不应为每个视图创建新的列表视图适配器实例:

     public View setupListView(int position) {
        View view= ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.tablayout_listview_layout, null);
        mListView = (ListView) view.findViewById(R.id.tablayout_listview);
        ArrayList<OEDataRow> finallist = getListViewData(originalTabsList.get(position)/*dataRow*/, originalDataList);

        final  ALListViewAdapter alListViewAdapter = new ALListViewAdapter(finallist);
        mListView.setAdapter(alListViewAdapter);
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                // Do your stuff...


                alListViewAdapter.notifyDataSetChanged();
            }
        });

        return view;
    }
公共视图设置列表视图(int位置){
视图视图=((LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE)).inflate(R.LAYOUT.tablayout\u listview\u LAYOUT,null);
mListView=(ListView)view.findViewById(R.id.tablayout\u ListView);
ArrayList finallist=getListViewData(OriginalTablesList.get(position)/*dataRow*/,originalDataList);
最终ALListViewAdapter ALListViewAdapter=新ALListViewAdapter(finallist);
setAdapter(alListViewAdapter);
mListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
//做你的事。。。
alListViewAdapter.notifyData