Как назначить номер массиву и отобразить его в виде списка? - PullRequest
0 голосов
/ 01 марта 2012

У меня есть два занятия. Сначала я помещаю список предметов с 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 голос
/ 02 марта 2012

В ваш второй Activity получить идентификатор из другой деятельности:

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

Если ваши массивы имеют имя categoryX (x-номер), тогда создайте строку с именем массива:

String arrayName = "category" + elementID;

Затем вы можете получить идентификатор этого конкретного массива следующим образом:

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

и, наконец, получите массив String и поместите его в адаптер:

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

Также имейте в виду, что позиция в списке начинается с 0, поэтому назовите свой массив, начиная с 0;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...