2016-07-13 15 views
3

Ich habe Tabhost mit 3 Tabs.Wie aktualisiert man den Inhalt des Tabhost-Tabs jedes Mal, wenn ich auf den Tab klicke?

SONG LIST, neue Songs und FAVORITEN

In jedem Registerkarte mein Inhalt ist Linearlayout. Innerhalb von linearlayout habe ich listview.

Hier ist mein Code ..

@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); 
    } 

Wie kann der Registerkarte Inhalt jedes Mal aktualisieren i auf die Registerkarte klicken?

in meiner ersten Registerkarte SONG LIST,

ich einig Feld der Daten aktualisieren,

dann, wenn ich neue Songs Registerkarte Ansicht,

das Update in der Liste angezeigt werden soll ..

Was ich brauche, ist nur die Abfrage abrufen oder aktualisieren Sie die Seite jedes Mal, wenn ich auf die Registerkarte NEW SONGS klicken. damit es den Inhalt neu lädt und aktualisiert.

danke!

Antwort

0

Wenn Sie Listview aktualisieren wollen, müssen Sie seine eine einfache Methode aufrufen, sehr einfach, es ist notifyDataSetChanged() finden this Antwort für weitere Informationen, so in Ihrem Fall, wenn Sie auf einer Registerkarte klicken Sie einfach auf diese Methode aufrufen, wird es immer Aktualisieren Sie Ihre Liste und erzwingen Sie die Listenansicht, um sie erneut entsprechend der neuen Liste festzulegen, damit Sie Ihre Listenansicht nach den letzten Änderungen, die zu jeder Zeit auftreten, erkennen können.

finden Sie in der Entwicklerdokumentation here.

+0

funktioniert nicht in meinem Fall .. – Joehamir

+0

hast du diese Antwort gesehen, ich habe bereits eine Frage in meiner Antwort. http://stackoverflow.com/a/21862750/5476209? Dies ist eine andere Möglichkeit, – TapanHP

+0

eine gute Erklärung darüber ist hier: http://StackOverflow.com/A/16708283/5476209 – TapanHP

1

Eigentlich Problem ist Ihre Aktivität bereits rendern und in Ihrem Fall möchten Sie Ihr Element aktualisieren, wenn Benutzer Registerkarte auf der Liste. Sie können dies durch paarweise tun:

1) Überschreiben Sie OnResume() Methode in Ihrer Klasse als fügen Sie den Code des Elements, die holen und aktualisieren Sie Ihre Benutzeroberfläche in diesem Lebenszyklus-Methode.

2) Fügen Sie tabhost Intent.FLAG_ACTIVITY_CLEAR_TOP hinzu, während Sie eine Registerkarte einrichten.

+0

aber mein Problem ist mein Tabhost ist innerhalb Fragment .. – Joehamir

+0

Und das Fragment haben auch onResume() -Methode. – QuokMoon

+0

können Sie mir helfen, meinen Code zu konstruieren? Vielen Dank.. – Joehamir