2017-02-24 122 views
0

我有一个我正在处理的小应用程序,它显示了一个怪物列表。你可以点击每个怪物来查看关于那个怪物的更多信息。将数据从一个活动动态添加到另一个活动

该列表位于我的xml布局文件中的TableLayout中。

但是看着代码,很容易看到事物如何失控,我添加的怪物越多。

我想知道,如果有更好的方法来确定哪个怪物被点击以及如何获得从怪物视图列表传递到怪物信息视图所需的信息。

这是我的代码到目前为止。它工作正常,但我知道这不是很好,因为我必须为每个添加到列表中的新怪物添加一个新的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

谢谢你让我知道我离开了那些信息。我编辑了原始问题以包含它。怪物列表位于TableLayout中的XML文件中。 – SkyeBoniwell

回答

1

将您的怪物列表保存在List对象中,并将其传入ArrayAdapter对象中,该对象将用于填充ListView。在List对象中,您可以使用obj.add(monster_name)动态地添加更多怪物。在setOnItemSelected方法中将所选怪物保存在静态字符串对象中,该对象可以在任何使用MonsterListActivity.monster_name的活动中访问。用它从文件/数据库中提取数据。

+0

我有我的xml布局文件中的所有怪物在 ......每个怪物都在自己的。这与List类似吗? – SkyeBoniwell

+0

你有哪些怪物的细节?不是你想展示他们的地方,但你从哪里得到它?你把它全部写在一个文件或什么东西? –

+0

我刚刚在我的xml布局文件中包含了所有内容。 – SkyeBoniwell

1

按照如何得到哪个怪物被点击。如果您使用的是RecyclerView,并且如果ListView只是setOnItemClickListener。通过点击物品的位置,您可以从怪物对象列表中获得对象,然后从那里获得id

在数据库中放入关于怪物的数据,并将怪物的ID传递给您将从数据库中获取数据的另一活动。

+0

你的意思是这样吗? https://www.mkyong.com/android/android-listview-example/ – SkyeBoniwell

1

你可以做的只是将数据保存到数据库,并为每个怪物分配一个唯一的ID。点击你将ID传递给下一个活动,并获取有关怪物的数据。另一方面,如果您不想保存数据,请将点击意图数据传递给其他活动(即,如果您在第一个活动中有数据)。

由于您必须添加视图,因此我建议您使用recycler视图,您可以在该列表中简单添加项目并调用notifyDataSetChanged()。使用表格布局可能不是一个好主意。

相关问题