2016-07-13 8 views
3

私は3つのタブでtabhostを持っています。タブをクリックするたびにタブホストタブの内容を更新する方法は?

曲のリスト、NEW SONGSとFAVORITES

すべてのタブで、私のコンテンツがあるのLinearLayout。 linearlayoutの中に私はリストビューを持っています。ここで

は私のコードは

@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リストに

私はいくつかのデータフィールドを更新し、

、私は新しい曲のタブを表示し、

更新がリストに表示されます。..

必要なのは、[NEW SONGS]タブをクリックするたびにクエリを呼び出すか、ページを更新するだけです。コンテンツをリロードして更新します。

ありがとうございました!

答えて

0

リストビューをリフレッシュしたい場合は、あなたのケースでは、任意のタブをクリックしたときにはちょうどそれが常になることをメソッドを呼び出すので、詳細はthisの答えを参照してください、それはnotifyDataSetChanged()あるその非常に簡単に簡単なメソッドを呼び出す必要がありますあなたのリストをリフレッシュして、新しいリストごとにリストビューを強制的に設定して、リストビューをいつでも最新の変更に応じて検出できるようにします。

開発者のドキュメントhereを参照してください。

+0

私の場合では動作しません。 – Joehamir

+0

あなたはこの回答を見ましたか?私は既に私の答えに質問を付けています。 http://stackoverflow.com/a/21862750/5476209?これは別の方法です – TapanHP

+0

それについての良い説明はここにあります:http://stackoverflow.com/a/16708283/5476209 – TapanHP

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))); 
+0

しかし、私の問題は、私のタブホストはフラグメント内にあります。 – Joehamir

+0

また、フラグメントにもonResume()メソッドがあります。 – QuokMoon

+0

私のコードを構築する手助けができますか?ありがとう.. – Joehamir

関連する問題