每次单击选项卡时如何刷新tabhost选项卡内容?

时间:2016-07-13 03:23:20

标签: android listview android-tabhost

我有3个标签的tabhost。

歌曲名单,新歌和最喜欢的歌曲

在每个标签中,我的内容都是linearlayout。在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标签时,

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

我需要的只是在每次单击“新歌”选项卡时调用查询或刷新页面。这样它就会重新加载并更新内容。

谢谢!

2 个答案:

答案 0 :(得分:2)

实际上问题是您的活动已经呈现,在您的情况下,您希望每当列表中的用户选项卡刷新您的项目。 您可以通过以下方式完成此操作:

1)覆盖类中的OnResume()方法,而不是在此生命周期方法中添加获取和更新UI的项目代码。

2)在设置选项卡时添加tabhost 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)));

答案 1 :(得分:0)

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

请参阅开发人员文档here