【问题标题】:Populating a spinner used in more than two activities填充用于两个以上活动的微调器
【发布时间】:2013-09-06 17:54:04
【问题描述】:

我的应用中有一个操作栏微调器和两个活动。从数据库填充的微调器需要在我的两个活动中都可见。我应该如何在不复制代码的情况下生成它?我应该创建一个静态方法还是其他什么?

private NotesDbAdapter mDbHelper;
private List<String> listUniqueCat;
int selectedPos;

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

    setContentView(R.layout.activity_joke_details);
    mDbHelper = new NotesDbAdapter(this);
    mDbHelper.open();

    //this method returns list of strings from a database
    listUniqueCat = mDbHelper.getUniqueCategories();

    // create an array adapter to popluate dropdown list
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
        getBaseContext(),
        android.R.layout.simple_spinner_dropdown_item, listUniqueCat);

    // enable dropdown list naaavigation in action bar
    getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

    // defining navigation listiner
    ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {
        @Override
        public boolean onNavigationItemSelected(int itemPosition, long itemId)
        {
            selectedPos = getActionBar().getSelectedNavigationIndex();
            Toast.makeText(getBaseContext(), "selected index is "+ selectedPos ,
                                             Toast.LENGTH_LONG).show();

            return false;
        }
    };

    // setting dropdown items and item navigation listener for action bar
    getActionBar().setListNavigationCallbacks(adapter, navigationListener);
}

【问题讨论】:

  • 一种方法是创建抽象的 BaseActivity,然后用你的两个活动扩展它。在您的 BaseActivity onCreate 中,您将实现从 DB 填充操作栏微调器的逻辑。
  • 但是无论如何我都必须重写这些方法
  • 在您的活动中,您总是会覆盖 onCreate,这样您就可以避免重复代码。
  • 每个activity都已经继承了Activity,不允许多重继承
  • @Frugo 使用 EveryAcivity extends BaseActivityBaseActivity extends Activity 这称为多级继承而不是多重继承。

标签: android android-actionbar spinner android-ui


【解决方案1】:

我认为您需要创建一个带有类似标签的 BaseActivity

abstract public class BaseActivity extends FragmentActivity {

}

所有其他活动都扩展了 BaseActivity

给你的小例子

BaseActivity.java

abstract public class BaseActivity extends Activity implements TabListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_first);
   ActionBar actionBar = getActionBar();
    // add tabs to actionbar
   actionBar.addTab(actionBar.newTab().setText("TAB 1")
        .setTabListener(this));
   actionBar.addTab(actionBar.newTab().setText("TAB 2")
        .setTabListener(this));

  }

}

FirstActivity.java

 public class FirstActivity extends BaseActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_first);
 }

 @Override
 public void onTabReselected(Tab tab, FragmentTransaction ft) {
   // TODO Auto-generated method stub

 }

 @Override
 public void onTabSelected(Tab tab, FragmentTransaction ft) {
     Toast.makeText(getApplicationContext(),
        tab.getText() + " selected in FirstActivity",
        Toast.LENGTH_SHORT).show();

   }

   @Override
   public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub

   }

 }

SecondActivity.java

 public class SecondActivity extends BaseActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_first);
  }

  @Override
  public void onTabReselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub

  }

  @Override
   public void onTabSelected(Tab tab, FragmentTransaction ft) {
   Toast.makeText(getApplicationContext(),
        tab.getText() + " selected in SectondActivity",
        Toast.LENGTH_SHORT).show();

    }

   @Override
   public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub

   }

 }

【讨论】:

  • 我没有标签,只有一个操作栏微调器
  • 这只是示例..您必须根据您的要求进行更改。
  • 注意:如果您使用 BaseActivity 模式,请不要将其用于不属于活动类的功能(如实用程序方法)。
  • 你的意思是不要在 BaseActivity 中使用non-activity 类的方法..不是吗?
猜你喜欢
  • 2021-11-20
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 2012-04-09
相关资源
最近更新 更多