0

你好吗马克?我对您在“CommonsWare The Busy Coders Guide to Android Development”一书中编写的程序有疑问。

我在第 28 章第 377 页上谈论 Fragments/EU4You_6。我想通过添加ActionBar Tab来扩展它。

没有对你原来的程序做任何改动,我所做的就是把EU4You.java复制到EU5You.java,代表Tab2。EU4You.java 将是默认的 Tab1。

以下是我的方法:

我创建了一个名为EU4Main.java的 java 程序,它代表 MAIN 程序而不是原始的 EU4You。当然,我将清单更改为 android:name=" .EU4Main "

EU4Main.java 是我放置 ActionBar 选项卡的地方。问题在于 TabListener 设置让我感到沮丧。我有这个设置.setTabListener(new TabListener(EU4You.class))); ,它通过了一个类。那没起效。您对此有什么建议而不是通过课程?

此外,下面代码片段上的onTabSelected无法正常工作。如果我单击 Tab2,它将显示 Tab2 的列表,但它会自动返回到 Tab1。它不会停留在 Tab2。我不知道为什么?

如果您能为.setTabListeneronTabSelected提供更好的工作方法,我将不胜感激

我也将FragmentActivity扩展到EU4Main或者我应该只使用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.

此外,您正在使用两个单独TabListener的实例,但您的代码TabListener不会根据提供的参数做任何不同的事情。

而且,您在选择选项卡时开始活动,这不会特别有用。

当 aTabListener被调用时onTabSelected(),它需要影响对现有 UI的更改。启动一个全新的活动并不构成对现有 UI 的更改。相反,TabListener应该执行以下操作:

  • 执行一个FragmentTransaction
  • ListAdapterListFragment选项卡管理中设置新鲜
  • 更新当前活动中的普通小部件
  • 等等
于 2011-11-26T13:39:19.337 回答