0

我正在制作一个Android音板。我目前有 12 页针对此特定类别。每个页面都有自己的活动,每个页面有 10 个按钮。

今天有人问我为什么我不只使用一个活动并在页面之间切换 setcontentview (XML) 而不是有这么多活动。

我想了想,这似乎不是一个坏主意。但我很好奇它是否真的会更好。

这意味着这个活动将为其 onclick 和 onlongclick 方法提供 100 多个 switch case 语句。它将有超过 200 个变量。我将不得不添加 200 多个侦听器(尽管我认为我可以在加载特定页面时设置 10 个侦听器,而不是在开始时全部设置。我还可以在显示新 XML 之前释放当前的侦听器)。

Android 是否能够处理这样的单个活动?我计划添加更多声音,所以也许有一天我可能有 20 页左右。

4

2 回答 2

0

我将分别解决您的一些观点:

  • 安卓能不能搞定。是的。尽管如此,你应该对设计事物的方式保持聪明。

  • 根据您运行的版本,您应该查看TabActivityor 或Fragments。Button如果你根据这些来构建你的活动,你可以在任何给定时间确定哪十个左右有听众。

  • 这里有一个更激进的想法:创建一个母类,扩展Activity并传递它的构造函数关于显示哪些按钮的信息。这样,您只有 10 个左右的按钮Activity,但您有 12 个活动。

  • 更激进的想法:扩展按钮并将其作为扩展的内部类Activity。这可能会引导你到一些有趣的地方。

如果你问一个稍微好一点的问题,我可以给你一个更好的答案,但这里有一些想法,随它去吧。祝你好运。

于 2012-05-06T06:17:28.117 回答
0

是的,让这一切成为一项活动。不同Activities的应该只真正用于完全不同的用例。考虑在一个 Activity 中使用 aListView或 aGridView或“ViewPager”。

如果你最终使用了一个ListView或任何需要适配器的东西,你的 Activity 应该如下所示:

class MyActivity extends Activity{

 int mySounds[] = {R.raw.s1, R.raw.s2}; //etc. could also be a 2d array, one for each page of sounds.

 protected void onCreate(Bundle b)
 {
   setContentView(R.layout.myactivity);

   ListView lv = (ListView) findViewById(R.id.myactivity_listView);

   lv.setAdapter(new SoundAdapter(this));

 }

class SoundAdapter extends BaseAdapter{
  Context cont;
  SoundAdapter(Context c){
   this.cont = c;
  }

  getView(int id, View convertView){
   if(convertView == null){
     ...
     //inflate view to be a row/gridcell
   }

   convertView.setOnClickListener(new SoundClickListener(mySounds[id]));
  }



}

 class SoundClickListener extends View.OnClickListener{

   int resId;

   public SoundClickListener(int resId)
   {
     this.resId = resId;
   }

   protected void onClick(View v){
     playSoundWithId(resId);
   }

 }

}
于 2012-05-06T06:21:09.850 回答