web-dev-qa-db-ja.com

ボタンクリックでフラグメントタブのコンテンツを更新する方法

私はAndroidで本当に新しいです、そして私は1つのDrupalウェブサイトからのニュースがある小さなプロジェクトを実装しています。このアプリは3つのタブとすべてのタブには、特定の内容の記事のリストがあります。記事のリストは、linearviewoutに配置されたテキストビューとイメージビューによって作成されます。タイトルをクリックすると、記事が詳細とともに開きます。これらの記事は、Drupal HTTPを介したサイトPOSTおよびViewJSONモジュール。タブはFragmentActivityとTabHostを使用して作成されます。ここまでは問題なく機能します。

私の問題は、タブの上に配置する1つの更新ボタンを作成し、それを押すと、記事のリストを更新または再読み込みして、現在のタブを開いたままにする必要があることです。タブフラグメントのコンテンツを置き換えて再度開こうとしましたが、1つの記事のタイトルをクリックしてそれを開くと、すべてのフラグメントの下にタブコンテンツがスタックに残ります。記事のタイトルをクリックすると、1つの新しいフラグメントが開いていることを述べました。記事のIDを引数として送信し、同じフラグメントで記事のコンテンツを開きました。

私はこのコードを試しましたが、成功しませんでした。

Button btn_refresh = (Button) findViewById(R.id.btn_refresh);
        btn_refresh.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                 String current_tab = mTabHost.getCurrentTabTag(); 
                 if(current_tab.contains("POPULARE")){

                     Fragment f;
                     f = new PopulareActivity(); 
                     FragmentTransaction ft =   getSupportFragmentManager().beginTransaction(); 
                     ft.replace(R.id.tot,f);   
                     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
                     ft.commit();
               }
                 if(current_tab.contains("RECOMANDATE")){

                     Fragment f;
                     f = new RecomandateActivity(); 
                     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
                     ft.replace(R.id.tot,f);   
                     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
                     ft.commit(); 
                 } 

より正確には、アプリで入力し、Tab2(tab2からの記事のリストを表示)を押し、更新ボタンを押し、1つの記事を開き、モバイルデバイスの戻るボタンを押して、tab2のコンテンツを表示します。次に、tab1を入力し(tab1の記事のリストを表示)、tab1のリストから1つの記事を開き、必要なものを表示して、モバイルから戻るボタンを押します。この瞬間にtab2のコンテンツが表示されます(更新ボタンを押したところからtab2の記事のリストが表示されます)。

使用している記事の詳細を開くには:

           tv.setOnClickListener(new View.OnClickListener() { 
                    public void onClick(View v) { 

                             Fragment f;
                             f = new DetaliiActivity();
                             Bundle data = new Bundle();  
                             data.putInt("id", nid);
                             f.setArguments(data);
                             FragmentTransaction ft = getFragmentManager().beginTransaction();

                             ft.replace(R.id.tot,f);

                             ft.addToBackStack(null); 
                             ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
                             ft.commit(); 
                    }
                });

助けてくれてありがとう!

10
mr.kosso

フラグメントのコンテンツを更新するには、フラグメントへの参照を保持し、そのフラグメントでパブリック(たとえば)refresh()メソッドを呼び出すことができます。例:

public class ArticleTabFragmentActivity extends FragmentActivity{
  private PopulareFragment populareFragment;
  private RecomandateFragment recomandateFragment;

  <code>

  private void bindView(){
    Button btn_refresh = (Button) findViewById(R.id.btn_refresh);

    btn_refresh.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                 String current_tab = mTabHost.getCurrentTabTag(); 
                 if(current_tab.contains("POPULARE")){
                   populareFragment.refresh();
                 } else if(current_tab.contains("RECOMANDATE")){
                   recomandateFragment.refresh();
                 } 
    });
  }



}

public class PopulareFragment extends Fragment{  

  public void refresh(){
    <refresh the contents of the fragment>
  }

}

<Same for other fragment>

ここで、PupulareFragmentのようにタブフラグメントを作成するときに、pupulareFragmentインスタンス変数を使用してフラグメントを格納します。したがって、更新ボタンのonClickメソッドで使用できます。

この方法では、更新時に新しいフラグメントを置き換えたり作成したりすることはありません。したがって、記事の詳細のアクティビティに行った後でtabActivityに戻ると、おそらく同様にうまく機能します。

6
NickL