我有一个小应用程序,我正在处理,显示一个怪物列表。你可以点击每个怪物来查看关于那个怪物的更多信息。
该列表位于TableLayout的xml布局文件中。
但是看一下这段代码,很容易看出我添加的怪物越多越不清楚。
我想知道,如果有更好的方法来确定点击了哪个怪物,以及如何从怪物视图列表传递到怪物信息视图所需的信息。
到目前为止,这是我的代码。它工作正常,但我知道它不是很好,因为我必须为我添加到列表中的每个新怪物添加一个新的case语句。
public void AddNewView(View view) {
//get selected button view
switch(view.getId())
{
//get textview & imageview monsters from xml
//get monster picture and monster info from xml
case R.id.showMonsterButton1:
iv = (ImageView) findViewById(R.id.monster1_icon);
tv = (TextView) findViewById(R.id.monster1_info);
ShowMonsterInfoView(tv, iv);
break;
case R.id.showMonsterButton2:
iv = (ImageView) findViewById(R.id.monster2_icon);
tv = (TextView) findViewById(R.id.monster2_info);
ShowMonsterInfoView(tv, iv);
break;
case R.id.showMonsterButton3:
iv = (ImageView) findViewById(R.id.monster3_icon);
tv = (TextView) findViewById(R.id.monster3_info);
ShowMonsterInfoView(tv, iv);
break;
case R.id.showMonsterButton4:
iv = (ImageView) findViewById(R.id.monster4_icon);
tv = (TextView) findViewById(R.id.monster4_info);
ShowMonsterInfoView(tv, iv);
break;
}
}
public void ShowMonsterInfoView(TextView tv, ImageView iv) {
Intent intent = new Intent(this, DisplayMonsterInfo.class);
String text_tag = tv.getTag().toString();
String image_tag = iv.getTag().toString();
Bundle extras = new Bundle();
extras.putString("name", text_tag);
extras.putString("avatar", image_tag);
intent.putExtras(extras);
startActivity(intent);
}
答案 0 :(得分:1)
根据如何获取点击的怪物。如果您使用的是RecyclerView,如果ListView
仅使用setOnItemClickListener
。通过单击项目的位置,您可以从列表中获取具有怪物对象的对象,然后从那里获取id
。
将有关怪物的数据放入数据库并将 id of monster 传递给另一个您将从数据库中获取数据的活动。
答案 1 :(得分:1)
你可以做的只是将数据保存到数据库并为每个怪物分配一个唯一的ID。在点击时你将id传递给下一个活动并获取有关怪物的数据。
另一方面,如果您不想保存数据,请将带有点击意图的数据传递给其他活动(即如果您在第一个活动中有数据)。
由于你必须添加视图,我建议你使用recycleler视图,你只需在你提供的列表中添加项目并调用notifyDataSetChanged()。使用表格布局可能不是一个好主意。
答案 2 :(得分:1)
将您的怪物列表保存在List
对象中,并将其传递到ArrayAdapter
对象中,该对象将用于填充ListView
。在List
对象中,您可以使用obj.add(monster_name)
动态添加更多怪物。在setOnItemSelected
方法中,将选定的怪物保存在 static String对象中,可以使用MonsterListActivity.monster_name
在任何活动中访问该对象。用它来从文件/数据库中提取数据。