2016-07-13 5 views
3

У меня есть tabhost с 3 вкладками.Как обновить содержимое вкладки tabhost каждый раз, когда я нажимаю вкладку?

СПИСОК ПЕСЕН, НОВЫЕ ПЕСНИ и FAVORITES

В каждой вкладке, мое содержание 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); 
    } 

Как содержимое вкладки можно обновить каждый раз, когда я нажимаю на вкладку?

в моей 1-й вкладке SONG LIST,

я обновить некоторые поля данных,

тогда, когда я просмотреть новую вкладку ПЕСНИ,

обновление должно появиться в списке ..

Мне нужно просто вызвать запрос или обновить страницу каждый раз, когда я нажимаю вкладку НОВЫЕ ПЕСНИ. так что он перезагрузит и обновит содержимое.

спасибо!

ответ

0

Если вы хотите обновить ListView вы должны вызвать простой метод его очень легко notifyDataSetChanged() см this ответа для получения дополнительной информации, так что в вашем случае, когда вы нажимаете на любой вкладке просто вызвать этот метод, он всегда будет обновите свой список и заставите listview установить его снова в соответствии с новым списком, чтобы вы могли обнаружить ваш список в соответствии с последними изменениями, произошедшими в любой момент времени.

см. Документацию разработчика here.

+0

не работает в моем случае .. – Joehamir

+0

ты видел этот ответ, я уже помечать вопрос в моем ответе. http://stackoverflow.com/a/21862750/5476209? это еще один способ – TapanHP

+0

Хорошее объяснение об этом здесь: http://stackoverflow.com/a/16708283/5476209 – TapanHP

1

Фактически проблема заключается в том, что ваша деятельность уже отображается, и в вашем случае вы хотите обновить свой элемент, когда пользовательская вкладка в списке. Вы можете сделать это несколькими способами:

1) Переопределите метод OnResume() в своем классе, чем добавьте код элемента, который извлекает и обновляет ваш пользовательский интерфейс в этом жизненном цикле.

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

Смежные вопросы