如何为数组分配一个数字并在列表视图中显示它?

时间:2012-03-01 19:40:50

标签: android arrays android-listview

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

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);
            }
        });
    }
}

这是获取列表中元素位置的代码:

String defStrID = new Integer(position).toString();

我在第二个ListView中使用:

Bundle bundle = getIntent().getExtras();
String elementID = bundle.getString("defStrID");

我在arrays.xml中为第二个ListView添加了一些数组。例如:

R.array.category1
R.array.category2
R.array.category3
R.array.category4

或像这样的数组(它不是很重要):

String category1[] = { //some items here }
String category2[] = { //some items here }
etc.

例如,只有少数数组,实际上更多,所以我不想使用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)); } } 活动相同。


第二项活动:

{{1}}

1 个答案:

答案 0 :(得分:1)

在您的第二个Activity中获取其他活动的ID:

Bundle bundle = getIntent().getExtras();
String elementID = bundle.getString("defStrID");

如果数组的名称为categoryX(x -number),则构建一个带有数组名称的String:

String arrayName = "category" + elementID;

然后你可以得到这个特定数组的id:

int id = getResources().getIdentifier(arrayName, "array", getPackageName());

最后获取String数组并将其放入适配器中:

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

另请注意,列表中的位置始于0,因此请将您的数组命名为0;