10

私はAndroidを初めて使用し、小さなプロジェクトを実装しています。このプロジェクトでは、1つのDrupalWebサイトからのニュースがあります。このアプリには3つのタブがあり、すべてのタブには特定のコンテンツを含む記事のリストがあります。記事のリストは、linearlayoutに配置されたtextviewsとimageviewsによって作成されます。タイトルをクリックすると、記事が開いて詳細が表示されます。これらの記事は、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(); 
  }
});

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

4

2 に答える 2

6

フラグメントの内容を更新するには、フラグメントへの参照を保持し、そのフラグメントでパブリック(たとえば)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インスタンス変数を使用してフラグメントを格納します。したがって、クリックメソッドの更新ボタンで使用できます。

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

于 2012-11-29T14:00:41.443 に答える
-1
FragmentTabHost tabHost3 = (FragmentTabHost) findViewById(android.R.id.tabhost);
String current_tab = tabHost3.getCurrentTabTag();
if (current_tab.equals("abc")) { 
    ClassFragment ni = (ClassFragment) getSupportFragmentManager().findFragmentByTag("abc");
    ni.refresh();
}

これを試してください。タブの下にあるものはすべて再実行されます。

于 2017-03-05T21:21:57.227 に答える