0

マークはどうですか?「CommonsWare The Busy Coders Guide to Android Development」という本であなたが書いたプログラムについて質問があります。

私は Fragments/EU4You_6 について 28 章の 377 ページで話しています。ActionBar Tabを追加してこれを拡張したいと思います。

元のプログラムを変更せずに、私は EU4You.java を Tab2 を表す EU5You.java にコピーしました。EU4You.java がデフォルトの Tab1 になります。

以下は私のアプローチです:

元の EU4You の代わりに MAIN プログラムを表すEU4Main.javaという Java プログラムを作成しました。もちろん、マニフェストを android:name=" .EU4Main "に変更しました

EU4Main.java は、ActionBar タブを配置した場所です。問題は、TabListener のセットアップにあることです。このセットアップがあります.setTabListener(new TabListener(EU4You.class))); 、クラスを渡します。それは動かなかった。クラスに合格する代わりに、これについて何かアドバイスはありますか?

また、以下のコード スニペットのonTabSelectedが正しく機能しませんでした。Tab2 をクリックすると、Tab2 のリストが表示されますが、自動的に Tab1 に戻ります。Tab2 にとどまりません。どうしてか分かりません?

.setTabListeneronTabSelectedの両方により優れた実用的なアプローチを提供できれば、どんな助けにも感謝します

FragmentActivityEU4Mainに拡張しましたか、代わりに extends Activity を使用しますか?

前もって感謝します。

以下の EU4Main には、正しくない不完全なコードが含まれています (動作させることができません...)。

public class EU4Main extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final ActionBar bar = getActionBar();
        bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

        bar.addTab(bar
                .newTab()
                .setText("Countries")
                .setTabListener(new TabListener(EU4You.class)));

        bar.addTab(bar
                .newTab()
                .setText("Artists")
                .setTabListener(new TabListener(EU5You.class)));
.
.
.
private class TabListener implements ActionBar.TabListener {


public TabListener(Activity activity) {
             mActivity = activity;

        }


  public void onTabSelected(ActionBar.Tab tab, android.app.FragmentTransaction unused) {
          if (tab.getPosition() == 0) {
            Intent intent = new Intent();
                String packageName = "com.commonsware.android.eu4you";
                String className   = "com.commonsware.android.eu4you.EU4You";
                intent.setClassName(packageName, className);
                startActivity(intent);
else{
            Intent intent = new Intent();
                String packageName = "com.commonsware.android.eu4you";
                String className   = "com.commonsware.android.eu4you.EU5You";
                intent.setClassName(packageName, className);
                startActivity(intent);

}

        }


 public void onTabUnselected(ActionBar.Tab tab, android.app.FragmentTransaction unused) {
          FragmentManager fragMgr = getSupportFragmentManager();
          FragmentTransaction xaction=fragMgr.beginTransaction();

        }
     public void onTabReselected(ActionBar.Tab tab,
                                    android.app.FragmentTransaction xaction) {
          // NO-OP
        }
}
4

1 に答える 1

1

を受け取るTabListenerコンストラクタがありActivityます。を使用してコンストラクターを呼び出していClassます。AClassは ではありませんActivity

さらに、2 つの別個のTabListenerインスタンスを使用していますが、コードはTabListener、指定されたパラメーターに基づいて異なることをしません。

また、タブが選択されたときにアクティビティを開始していますが、これは特に役に立ちません。

TabListenerが で呼び出された場合、既存の UI へのonTabSelected()変更に影響を与える必要があります。まったく新しいアクティビティを開始しても、既存の UI が変更されるわけではありません。むしろ、次のようにする必要があります。TabListener

  • 実行するFragmentTransaction
  • タブで管理されListAdapterた新しい設定ListFragment
  • 現在のアクティビティで通常のウィジェットを更新します
于 2011-11-26T13:39:19.337 に答える