每次单击标签时如何刷新标签主机标签内容?

Posted

技术标签:

【中文标题】每次单击标签时如何刷新标签主机标签内容?【英文标题】:How to refresh tabhost tab content every time i click the tab? 【发布时间】:2016-11-15 11:31:00 【问题描述】:

我的 tabhost 有 3 个标签。

歌曲列表、新歌和最爱

在每个标签中,我的内容都是线性布局。在linearlayout里面我有listview。

这是我的代码..

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_fragment_one, container, false);

        TabHost host = (TabHost) rootView.findViewById(R.id.tabHost);
        host.setup();

        dbHelper = new FragmentOne_DbAdapter(getActivity());
        dbHelper.open();
        //Clean all data
        //dbHelper.deleteAllPlayer1();
        //Add some data
        dbHelper.insertPlayer1Songlist();
        //Generate ListView from SQLite Database

        //Tab 1
        TabHost.TabSpec spec = host.newTabSpec("SONG LIST");
        spec.setContent(R.id.tab1);
        spec.setIndicator("SONG LIST");
        host.addTab(spec);

        listView = (ListView) rootView.findViewById(R.id.slPlayer1ListView);
            player1ESearch = (EditText) rootView.findViewById(R.id.player1Search);
            ImageButton dplayer1ESearch=(ImageButton) rootView.findViewById(R.id.delete);
            dplayer1ESearch.setOnClickListener(new View.OnClickListener() 
                public void onClick(View v) 
                    player1ESearch.setText("");
                
            );
            displayPlayer1ListView();

        //Tab 2
        spec = host.newTabSpec("NEW SONGS");
        spec.setContent(R.id.tab2);
        spec.setIndicator("NEW SONGS");
        host.addTab(spec);

            listViewNew = (ListView) rootView.findViewById(R.id.slPlayer1NewListView);
            displayPlayer1NewListView();

        //Tab 3
        spec = host.newTabSpec("FAVORITES");
        spec.setContent(R.id.tab3);
        spec.setIndicator("FAVORITES");
        host.addTab(spec);

        return rootView;
    

    private void displayPlayer1ListView() 
        Cursor cursor = dbHelper.fetchAllPlayer1();

        FragmentOneAdapter = new FragmentOne_Adapter(getActivity(), cursor, 0);
        listView.setAdapter(FragmentOneAdapter);

        player1ESearch.addTextChangedListener(new TextWatcher() 

            public void afterTextChanged(Editable s) 
            

            public void beforeTextChanged(CharSequence s, int start,
                                          int count, int after) 
            

            public void onTextChanged(CharSequence s, int start,
                                      int before, int count) 
                FragmentOneAdapter.getFilter().filter(s.toString());
            
        );

        FragmentOneAdapter.setFilterQueryProvider(new FilterQueryProvider() 
            public Cursor runQuery(CharSequence constraint) 
                return dbHelper.fetchPlayer1ByTitle(constraint.toString());
            
        );
    

    private void displayPlayer1NewListView() 
        Cursor cursor = dbHelper.fetchAllPlayer1New();
        FragmentOneAdapterNew = new FragmentOne_AdapterNew(getActivity(), cursor, 0);
        listViewNew.setAdapter(FragmentOneAdapterNew);
    

每次点击标签页时如何刷新标签页内容?

在我的第一个标签 SONG LIST 中,

我更新了一些数据字段,

然后当我查看 NEW SONGS 选项卡时,

更新应该出现在列表中..

我需要的是每次单击“新歌曲”选项卡时调用查询或刷新页面。以便它重新加载和更新内容。

谢谢!

【问题讨论】:

【参考方案1】:

实际上的问题是您的活动已经呈现,并且在您的情况下,您希望在列表上的用户选项卡时刷新您的项目。 您可以通过以下几种方式做到这一点:

1) 在你的类中重写 OnResume() 方法,而不是在这个生命周期方法中添加获取和更新你的 UI 的项目代码。

2)在设置标签时添加标签主机Intent.FLAG_ACTIVITY_CLEAR_TOP

  i.e
  tabHost.addTab(tabHost.newTabSpec("tab1")
    .setIndicator("First Text")
    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    .setContent(new Intent(this, class1.class)));

【讨论】:

并且片段也有onResume()方法。【参考方案2】:

如果您想刷新 ListView,您必须调用一个简单的方法,它非常简单,它是 notifyDataSetChanged() ,请参阅this 回答以获取更多信息,因此无论何时您点击任何选项卡只需调用该方法,它将始终刷新您的列表并强制列表视图根据新列表再次设置它,以便您可以根据任何时间实例发生的最新更改检测您的列表视图。

请参阅开发者文档here。

【讨论】:

你看到这个答案了吗,我已经在我的答案中标记了一个问题。 ***.com/a/21862750/5476209 ?这是另一种方式 在我的第一个选项卡中,SONG LIST 我更新了数据的某些字段,然后当我查看 NEW SONGS 选项卡时,更新应该出现在列表中。我需要的只是回忆查询或刷新每次我单击“新歌曲”选项卡时的页面。这样它就会在“歌曲列表”选项卡中重新加载更新我的图像。 所以你必须把它放在sqlite数据库中,每次当你调用新标签页bt点击一个标签然后每次都从sqlite数据库中获取所有曲目,但如果你想要它更快速更高效然后首先设置条件检查sqlite是否发生任何变化?如果是这样,则从那里获取列表并将该列表传递到您的适配器中,以便您始终获得最新列表。 你能帮我构建我的代码吗?我更新了我的片段代码..谢谢.. 很抱歉有工作要做,但您知道该怎么做。请自己做。谢谢。

以上是关于每次单击标签时如何刷新标签主机标签内容?的主要内容,如果未能解决你的问题,请参考以下文章

每次单击按钮时移动一个标签 PyQt5

如何通过单击更改集合视图单元格中的标签颜色

标签栏单击委托

jquery ui中切换标签时如何刷新当前tabs下的内容

Swift - 更新/刷新显示时间的标签

标签栏/导航刷新