4

我发现自己在 3 个单独的活动中为我的 actionBar (actionBarSherlock) 列表重写了相同的代码。所有 3 都使用相同的 actionBar,它有 3 个启动活动 #1、#2、#3 的项目。

getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
ArrayAdapter<CharSequence> list = ArrayAdapter
    .createFromResource(this, R.array.action_list, android.R.layout.simple_dropdown_item_1line);
list.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

getSupportActionBar().setListNavigationCallbacks(list, this);
getSupportActionBar().setListNavigationCallbacks(adapter, this);
getSupportActionBar().setSelectedNavigationItem(position);

我有 2 个问题:

  1. 在这种情况下,我应该使用 1 个活动和 3 个片段吗?我的活动是列表视图、地图视图和表单视图。我不确定这是否是使用 Fragments 的正确案例,因为在我的案例中,这些视图中的每一个都使用整个屏幕。

  2. 使用 3 个不同的活动,我可以创建一个新类,其唯一目的是使用上面的代码为我配置我的 ActionBar,以便初始化代码只在一个地方?

就像是:

public class setupActionBar {
    private ActionBar myBar;
    public setupActionBar(ActionBar myBar){
        this.myBar = myBar;
        //Do Initialization on myBar;
    }

    public ActionBar getMyBar(){
        return myBar;
    }
}
4

3 回答 3

10

观看此视频。他创建了一个BaseActivity子类化程序中使用的所有活动。巧妙的小技巧;)

你可以稍后感谢我 :D

于 2012-11-08T16:44:40.640 回答
0

使用@aindurti 建议的优秀教程,我能够使用扩展 SherlockActivity 的 BaseActivity,然后使用扩展 BaseActivity 的 Activity1 来完成这项工作。

但是,我遇到了奇怪的行为。当我从微调器中选择 Activity #3 时,它会立即返回到 Activity#1,onNavigationItemSelected并被调用 3 次。对代码的想法?我应该onNavigationItemSelected进入每个活动吗?我认为这将是一种简洁而统一的方式。

在 BaseActivity.java 中:

@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
    //Tell user the FROM and TO navigationIndex   
    Toast.makeText(getApplicationContext(), "Selected: " + itemPosition + " from" + currentNavigationIndex, Toast.LENGTH_SHORT).show();

    Intent myIntent;
    if(itemPosition != currentNavigationIndex){
        if(itemPosition == 0){ //Activity#1 Selected
            myIntent = new Intent(BaseActivity.this, Activity1.class);
        } else if (itemPosition == 1){ //Activity#2 Selected
            myIntent = new Intent(BaseActivity.this, Activity2.class);
        } else if (itemPosition == 2){ //Activity#3 Selected
            myIntent = new Intent(BaseActivity.this, Activity3.class);
        }
        BaseActivity.this.startActivity(myIntent);
    }
    return true;
}
于 2012-11-10T01:53:03.027 回答
0

有几种方法可以做到这一点。你可以在某处创建一个静态函数来进行初始化,或者你可以为一个活动创建一个基类。

例如:

public class Bob
{
   public static void dance(Dance someDance)
   {
      someDance.doBadDance();
   }
}

您可以将其与 Bob.dance(); 任何地方。不确定课程是否必须是最终的

于 2012-11-08T16:24:24.763 回答