Android 如何将数字分配给数组并在listview中显示?

Android 如何将数字分配给数组并在listview中显示?,android,arrays,android-listview,Android,Arrays,Android Listview,我有两项活动。首先,我放置了一个带有列表视图的项目列表。在第二个例子中,我也想列出一个项目列表,但其内容将取决于元素的位置,元素在第一个Activitö中被按下。以下是第一个列表视图活动的代码: public class ListView1 extends Activity implements OnClickListener { private ListView lv1; private String cats[]; //some code @Override

我有两项活动。首先,我放置了一个带有
列表视图的项目列表。在第二个例子中,我也想列出一个项目列表,但其内容将取决于元素的位置,元素在第一个
Activitö
中被按下。以下是第一个
列表视图
活动的代码:

public class ListView1 extends Activity implements OnClickListener {
    private ListView lv1;
    private String cats[];

//some code

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);

        Bundle bundle = getIntent().getExtras();
        final String category = bundle.getString("category");

        lv1 = (ListView) findViewById(R.id.listView);

            ArrayAdapter<CharSequence> adapter = ArrayAdapter
                    .createFromResource(this, R.array.first_list,
                            R.layout.list_items);
            lv1.setAdapter(adapter);
            cats = getResources().getStringArray(R.array.first_list);

        lv1.setTextFilterEnabled(true);
        lv1.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> a, View v, int position,
                    long id) {
                String defStrID = new Integer(position).toString();

                Intent intent = new Intent();
                intent.setClass(ListView1.this, ListView2.class);

                Bundle b = new Bundle();
                b.putString("defStrID", defStrID);
                intent.putExtras(b);

                startActivity(intent);
            }
        });
    }
}
我在第二个
列表视图中使用以下内容获取它:

Bundle bundle = getIntent().getExtras();
String elementID = bundle.getString("defStrID");
我在
arrays.xml
中为第二个
ListView
设置了一些数组。例如:

R.array.category1
R.array.category2
R.array.category3
R.array.category4
或者像这样的数组(这不是很重要):

例如,只有几个数组,实际上更多,所以我不想使用
if-else
构造。我不知道如何用另一种方法来做。第二个
ListView
活动将与第一个活动相同,但上述活动除外


第二项活动:

public class List2 extends ListActivity {
    private ListView lv1;
    private String category1[] = {"Name1", "Name2"};
    private String category2[] = {"Surname1", "Surname2"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle bundle = getIntent().getExtras();
        ;
        String elementID = bundle.getString("defStrID");
        String arrayName = "category" + elementID;
        int id = getResources().getIdentifier(arrayName, "array",
                this.getPackageName());
        Log.v("LOOK_FOR_ME", "category" + " and the id i got is " + id);
        String[] stats = getResources().getStringArray(id);
        lv1.setAdapter(new ArrayAdapter<String>(this, R.layout.list_items,
                stats));
    }
}
Bundle bundle = getIntent().getExtras();
String elementID = bundle.getString("defStrID");
公共类List2扩展了ListActivity{
私有ListView lv1;
私有字符串类别1[]={“Name1”,“Name2”};
私有字符串类别2[]={“姓氏1”,“姓氏2”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Bundle Bundle=getIntent().getExtras();
;
String elementID=bundle.getString(“defStrID”);
字符串arrayName=“category”+元素ID;
int id=getResources().getIdentifier(arrayName,“数组”,
这个.getPackageName());
Log.v(“LOOK_FOR_ME”,“category”+,我得到的id是“+id”);
String[]stats=getResources().getStringArray(id);
lv1.setAdapter(新阵列适配器)(此,R.layout.list_项,
统计数字),;
}
}

在第二个
活动中
从其他活动获取id:

public class List2 extends ListActivity {
    private ListView lv1;
    private String category1[] = {"Name1", "Name2"};
    private String category2[] = {"Surname1", "Surname2"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle bundle = getIntent().getExtras();
        ;
        String elementID = bundle.getString("defStrID");
        String arrayName = "category" + elementID;
        int id = getResources().getIdentifier(arrayName, "array",
                this.getPackageName());
        Log.v("LOOK_FOR_ME", "category" + " and the id i got is " + id);
        String[] stats = getResources().getStringArray(id);
        lv1.setAdapter(new ArrayAdapter<String>(this, R.layout.list_items,
                stats));
    }
}
Bundle bundle = getIntent().getExtras();
String elementID = bundle.getString("defStrID");
如果数组的名称为
categoryX
(x-number),则使用数组名称构建一个字符串:

String arrayName = "category" + elementID;
然后,您可以获得特定数组的id,如下所示:

int id = getResources().getIdentifier(arrayName, "array", getPackageName());
最后获取
字符串
数组并将其放入适配器:

String[] stats = getResources().getStringArray(id);

还要记住,列表中的位置从
0
开始,因此请以
0
开始命名数组

在第二个activity what your want array from xml>@Samir中,根据在第一个活动中命中的元素的位置,我想将第二个activity放入适当的数组中。例如:如果我在第一个活动中按了第一个元素,我将在第二个活动中获得带有category1数组的listview,等等。在第一个活动中得到的位置是以零为基础的。值将是R.array.category0,R.array.category1,…@njzk2感谢您的建议我这样做了,但我得到了错误:
android.content.res.Resources$NotFoundException:String array resource ID#0x0
。我根据您对问题的回答添加了代码。请看。@Sabre我测试了代码,它成功了。试着清理项目,看看你是否真的从第一个活动中得到了数字。我试图创建一个新的清理项目,但我得到了NullPointerException。你能给我你的项目吗,或者,请写第二个活动的完整代码。@Sabre我的代码和你的一样。我说要清理项目而不是创建新项目:在
Eclipse
中,进入菜单
project->clean…
,然后重新运行应用程序。我也遇到了同样的错误。看起来我做了所有应该做的事情,但它不起作用(