Android 当我在访问其他片段后打开它时,ListFragment不会刷新

Android 当我在访问其他片段后打开它时,ListFragment不会刷新,android,android-fragments,android-listview,android-arrayadapter,android-listfragment,Android,Android Fragments,Android Listview,Android Arrayadapter,Android Listfragment,我有一个主要活动和4个片段: 主页-只是一个普通的主页 关于-应用程序的基本信息, ListUsers-列出具有筛选功能的用户总数(这也有ActionTab)和 联系方式-联系方式 当我启动我的应用程序时,它会降落在Home Fragment上,然后我单击用选项卡实现的用户列表,我可以切换选项卡,它工作正常并显示正确的数据 在从ListUsers导航到和其他片段并返回ListUsers之后,我意识到它不会更改数据,并为多个选项卡显示相同的数据 onCreateView中的ListUsersFra

我有一个主要活动和4个片段:

主页-只是一个普通的主页 关于-应用程序的基本信息, ListUsers-列出具有筛选功能的用户总数(这也有ActionTab)和 联系方式-联系方式

当我启动我的应用程序时,它会降落在Home Fragment上,然后我单击用选项卡实现的用户列表,我可以切换选项卡,它工作正常并显示正确的数据

在从ListUsers导航到和其他片段并返回ListUsers之后,我意识到它不会更改数据,并为多个选项卡显示相同的数据

onCreateView中的ListUsersFragment代码:

public classListUsers extends ListFragment implements TabListener {

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            getActivity().setTitle("Users");
            mActivity = getActivity();
            actionBar = mActivity.getActionBar();

            filterUsers = getUsers(1);
            adapter = new ListViewAdapter(mActivity, filterUsers);
            setListAdapter(adapter);

            Tab firstTab = actionBar.newTab();
            RelativeLayout view = (RelativeLayout) mActivity.getLayoutInflater().inflate(R.layout.firstLabel, null);
            firstTab.setCustomView(view);
            actionBar.addTab(firstTab.setTabListener(this));
            .. Similarly addd 2 more tabss..

           View rootView = inflater.inflate(R.layout.listusers, container, false);

        return rootView;
    }


    public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
            filterUsers.clear();
            filterUsers = getUsers(arg0.position());
            adapter.notifyDataSetChanged();
            }

    public List<User> getUsers(int pos) {
       // Here i return the list of users which is changing based on selection and return list of users
     }
}
公共类ListUsers扩展ListFragment实现TablListener{
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getActivity().setTitle(“用户”);
mActivity=getActivity();
actionBar=mActivity.getActionBar();
filterUsers=getUsers(1);
适配器=新的ListViewAdapter(MacActivity、filterUsers);
setListAdapter(适配器);
Tab firstTab=actionBar.newTab();
RelativeLayout视图=(RelativeLayout)mActivity.getLayoutFlater().inflate(R.layout.firstLabel,null);
firstTab.setCustomView(视图);
actionBar.addTab(firstTab.setTabListener(this));
…同样地,再添加两个选项卡。。
视图根视图=充气机。充气(R.layout.listusers,container,false);
返回rootView;
}
已选择公共事务(选项卡arg0,碎片事务arg1){
filterUsers.clear();
filterUsers=getUsers(arg0.position());
adapter.notifyDataSetChanged();
}
公共列表getUsers(int pos){
//在这里,我返回用户列表,该列表根据所选内容进行更改,并返回用户列表
}
}

我从未使用过Tablistener,但我已经为listview的问题痛击了自己足够多的时间,从而知道您在这里做错了什么。请记住,每次更改某些内容时,都必须刷新适配器并将其连接到listview。尝试更改下面的函数,并让我知道它是否适合您

public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
        filterUsers.clear();
        filterUsers = getUsers(arg0.position());
        adapter = new ListViewAdapter(mActivity, filterUsers);
        setListAdapter(adapter);
        adapter.notifyDataSetChanged();
        }

您的程序逻辑存在一些问题:每次创建listfragment时,您都会在活动的ACTIONBAR中添加3个选项卡,例如,您第一次添加1,2,3,在转到其他片段并提交后,您向您的活动添加了除1,2,3以外的3个片段,例如4,5,6,但1,2,3仍然存在一个小问题,即他们的侦听器(即您以前的listfragment)现在已被删除,因此,表1、2、3现在没有任何侦听器,单击它们不会给出任何结果。我想如果你滚动标签,你可能会在操作栏中找到6个标签,但你认为你只有3个标签。更改逻辑或对listfragment使用其他选项卡机制。例如,将tabhost用于Listfragment布局。或者改用FragmentTabHost,或者您可以在listFragment的onDestroy方法中为选项卡设置标记并删除它们。

当您再次返回并选择其他选项卡时,
filterUsers
是否会更改?我的意思是does
filterUsers=getUsers(arg0.position())更改您的变量?不,它仍处于上次离开时的状态。我不认为您没有错误地实现选项卡。主机
活动
应负责创建选项卡,而不是此
片段