Как передать часть StringArray следующему действию на основе щелчка ListItem

У меня в Activity1 есть ListView с 10 элементами. В зависимости от того, какой элемент я нажимаю, я хочу передать только часть StringArray моей следующей активности. Я хочу привязать переданный StringArray через ArrayAdapter к GridView.

Первая проблема: я не понимаю, как я могу передать что-то в следующем действии, В ЗАВИСИМОСТИ от щелкнутого элемента в ListView моего Activity1

Вторая проблема: как я могу получить только части моего StringArray. В моем массиве строк 200 элементов. Теперь я хочу передать (в зависимости от itemclick в Activity1) только те элементы, которые мне действительно нужны.

Вот мой код

public class MainActivity extends Activity {

// ListView items
String[] provinces = new String[]{

        "Prozentrechnung, Terme und Brüche",
        "Gleichungen",
        "Ungleichungen und Beträge",
        "Geraden, Parabeln und Kreise",
        "Trigonometrie",
        "Potenzen, Wurzeln und Polynome",
        "Exponentialfunktionen und Logarithmen",
        "Trigonometrische Funktionen",
        "Differenzialrechnung",
        "Integralrechnung"
};

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


    ListView provincelist = (ListView)findViewById(R.id.lvProvinceNames);

    //add header to listview
    LayoutInflater inflater = getLayoutInflater();
    ViewGroup header = (ViewGroup)inflater.inflate(R.layout.listheader, provincelist, false);
    provincelist.addHeaderView(header, null, false);


    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, provinces);
    provincelist.setAdapter(adapter);
    provincelist.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // TODO Auto-generated method stub

            //we use the items of the listview as title of the next activity
            String province = provinces[position-1];

            //we retrieve the description of the juices from an array defined in arrays.xml
            String[] provincedescription = getResources().getStringArray(R.array.provincedescription);
            //List<String> aufgabenListe = new ArrayList<String>(Arrays.asList(provincedescription));
            //final String provincedesclabel = provincedescription[position-1];

            Intent intent = new Intent(getApplicationContext(), DetailActivity.class);
            intent.putExtra("position",position);
            intent.putExtra("province", province); //aktualisieren der Titel in der DetailActivity
            intent.putExtra("provincedescription", provincedescription); //befüllen der GridView

            startActivity(intent);


        }


    });

}

}

Вот Activity2, где я должен привязать свои элементы к GridView.

public class DetailActivity extends Activity {

String title;
String[] array;
int position;

//int image;

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

    TextView tvTitleLabel = (TextView)findViewById(R.id.tvTitleLabel);
    GridView gridView = (GridView) findViewById(R.id.gridView);

    ArrayAdapter<String> adapter;

    Bundle extras = getIntent().getExtras();
    position = extras.getInt("position");

    if (extras != null) {

        title = extras.getString("province");
        tvTitleLabel.setText(title);

        /////Fehlermeldung: array = null --> NullPointerException
        array = extras.getStringArray("provincedescription");
        gridView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array));
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {

            }
        });
        //adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array);
        //gridView.setAdapter(adapter);

    }



}

}

ОБНОВЛЕНИЕ: вот мой массив строк

<string-array name="provincedescription">
    <item>A1.1</item>
    <item>A1.2</item>
    <item>A1.3</item>
    <item>A1.4</item>
    <item>A1.5</item>
    <item>A1.6</item>
    <item>A1.7</item>
    <item>A1.8</item>
    <item>A1.9</item>
    <item>A1.10</item>
    <item>A1.11</item>
    <item>A1.12</item>
    <item>A1.13</item>
    <item>A1.13</item>
    <item>A1.14</item>
    <item>A2.1</item>
    <item>A2.2</item>
    <item>A2.3</item>
    <item>A2.4</item>
    <item>A2.5</item>
    <item>A2.6</item>
    <item>A2.7</item>
    <item>A2.8</item>
    <item>A2.9</item>
    <item>A2.10</item>
    <item>A2.11</item>
    <item>A2.12</item>
    <item>A3.1</item>
    <item>A3.2</item>
    <item>A3.3</item>
    <item>A3.4</item>
    <item>A3.5</item>
    <item>A3.6</item>
    <item>A3.7</item>
    <item>A3.8</item>
    <item>A3.9</item>
    <item>A3.10</item>
    <item>A3.11</item>
    <item>A3.12</item>
</string-array>

person ando    schedule 07.06.2014    source источник
comment
насколько я вижу, вы правильно передаете данные, так в чем проблема??   -  person Illegal Argument    schedule 07.06.2014
comment
Проблема в том, что в моем R.array.provincedescription 200 элементов. Поэтому, когда я нажимаю один элемент в ListView, мне нужна только часть этих 200 элементов. Теперь я прошел все 200. Как я могу найти в моем R.array.provincedescription элементы, которые мне нужны, в зависимости от того, какой элемент я нажимаю в своей деятельности1? И как я могу передать это без оператора switch case   -  person ando    schedule 07.06.2014
comment
один из способов сделать это - сделать ваш массив статическим и получить к нему доступ через имя класса   -  person Illegal Argument    schedule 07.06.2014
comment
Пожалуйста, покажите мне пример кода, это может быть очень полезно. Я очень новичок в программировании на Java и Android.   -  person ando    schedule 07.06.2014


Ответы (2)


если я понимаю, что вы хотите, возможно, вам стоит взглянуть на Синглтон, я использую и отлично работает на данный момент

https://gist.github.com/Akayh/5566992

Кредиты: https://stackoverflow.com/a/16518088/3714926

person Gabriel Santos    schedule 07.06.2014
comment
но как я могу искать в своем описании R.array.province. Есть ли возможность получить StringArray и найти нужные элементы. И как я могу связать его с выбранным элементом? - person ando; 07.06.2014

Для исправленных ресурсов, подобных вашему, лучше использовать массив строк в вашем XML-файле. Из Java я предпочитаю использовать статический массив в вашем случае. Вот образец:

public class Constants {
public static final String[] provinces = new String[] {

"Prozentrechnung, Terme und Brüche", "Gleichungen",
        "Ungleichungen und Beträge", "Geraden, Parabeln und Kreise",
        "Trigonometrie", "Potenzen, Wurzeln und Polynome",
        "Exponentialfunktionen und Logarithmen",
        "Trigonometrische Funktionen", "Differenzialrechnung",
        "Integralrechnung" };
}

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

String iWant = Constants.provinces[0];

Очень важное примечание. Статические объекты опасны в ряде сценариев, и они обычно присутствуют в памяти, поэтому используйте их с осторожностью.
Что касается массива строк, вы не можете получить один элемент непосредственно из строки- массив, определенный в xml. Для этого вам нужно сначала получить все элементы из массива:

 Resources res = getResources();
String[] planets = res.getStringArray(R.array.provincedescription);
person Illegal Argument    schedule 07.06.2014
comment
я обновил свой массив строк. Например, если я нажму на первый элемент моего списка, я хочу загрузить только элементы из массива строк с a1.1, a1.2, a1.3... до a1.14. Если я нажму на второй элемент моего списка, я хочу загрузить только a2.1, a2.2, a2.3 ... до a2.12 и так далее. И поместите их в мой GridView. Можно ли как-то решить эту проблему. Спасибо - person ando; 07.06.2014
comment
просто отправьте позицию щелчка в своем намерении, а затем в другом действии используйте String iWant = Constants.provinces[clickedFromPrevActivity]; где clickedFromPrevActivity — это позиция, в которой элемент был нажат - person Illegal Argument; 07.06.2014
comment
спасибо Недопустимый аргумент. Но я не понимаю, как я могу взять свои элементы из массива строк и заполнить свой вид сетки. Я хочу, чтобы мои элементы были в массиве строк, я не буду создавать класс с 200 элементами, если я понимаю, что вы имеете в виду. - person ando; 07.06.2014
comment
Constants.provinces предоставит вам все 200 предметов, которые вам нужны. Я показывал вам, как получить определенные предметы. Примечание: сначала попробуйте, а затем поймите - person Illegal Argument; 07.06.2014
comment
Хорошо, теперь я попробовал, но это не тот эффект, который мне нужен. Мне нужны части моего описания R.array.province. С вашим кодом я получаю только провинции, а не мои предметы из массива строк - person ando; 07.06.2014