将数据从一个活动动态添加到另一个活动

时间:2017-02-24 15:54:33

标签: android android-intent android-activity android-view

我有一个小应用程序,我正在处理,显示一个怪物列表。你可以点击每个怪物来查看关于那个怪物的更多信息。

该列表位于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);

    }

3 个答案:

答案 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在任何活动中访问该对象。用它来从文件/数据库中提取数据。