我正在制作Android音板。我目前有12个页面用于此特定类别。每个页面都有自己的活动,每个页面都有10个按钮。
今天有人问我为什么我不只是使用一个活动并在页面之间切换setcontentview(XML)而不是那么多活动。
我想到了它并不是一个坏主意。但我很好奇它是否真的会更好。
这意味着这个活动将为其onclick和onlongclick方法提供100+ switch case语句。它将有200多个变量。我将不得不添加超过200个侦听器(虽然我认为我可以设置10个侦听器,因为我加载特定页面而不是一开始。我还可以在显示新XML之前释放当前的。)
Android能够处理这样的单一活动吗?我计划添加更多声音,所以也许有一天我可能有20页左右。
答案 0 :(得分:0)
我会单独谈谈你的一些观点:
android能否处理它。是。不过,你应该对你的设计方式很聪明。
根据您运行的版本,您应该查看TabActivity
或Fragment
。如果您使用这些活动构建活动,您可以在任何给定时间基于哪些Button
有听众。
这是一个更为激进的想法:创建一个扩展Activity
的母类,并传递其构造函数信息,以显示要显示的按钮。这样,Activity
中只有10个按钮左右,但您有12个活动。
更为激进的想法:扩展按钮并将其作为Activity
扩展的内部类。这可能会带给你一些有趣的地方。
如果你问一个稍微更好的问题,我可以给你一个更好的答案,但这里有一些想法,用它来运行。祝你好运。
答案 1 :(得分:0)
是的,让它成为一项活动。不同的Activities
应该只用于完全不同的用例。考虑在一个活动中使用ListView
或GridView
或“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);
}
}
}