Android能够处理像这样的单个大型活动吗?

时间:2012-05-06 06:03:32

标签: java android

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

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

我想到了它并不是一个坏主意。但我很好奇它是否真的会更好。

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

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

2 个答案:

答案 0 :(得分:0)

我会单独谈谈你的一些观点:

  • android能否处理它。是。不过,你应该对你的设计方式很聪明。

  • 根据您运行的版本,您应该查看TabActivityFragment。如果您使用这些活动构建活动,您可以在任何给定时间基于哪些Button有听众。

  • 这是一个更为激进的想法:创建一个扩展Activity的母类,并传递其构造函数信息,以显示要显示的按钮。这样,Activity中只有10个按钮左右,但您有12个活动。

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

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

答案 1 :(得分:0)

是的,让它成为一项活动。不同的Activities应该只用于完全不同的用例。考虑在一个活动中使用ListViewGridView或“ViewPager”。

如果您最终使用ListView或任何需要适配器的内容,您的活动应如下所示:

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);
   }

 }

}