当我点击arrayList1中的第一项时,如何创建将打开包含arrayList2中第一项的页面

时间:2018-02-05 00:43:22

标签: android-studio

当我从第一个数组列表中点击第一个或第二个项目时,我从数组列表2中得到第一个项目,但是如果我点击数组列表1中的第二个项目我需要从列表2中显示第二个项目

public class SecondActivity extends AppCompatActivity {

    ListView listView;
    ArrayList<String> 1stArrayList;
    ArrayList<String> 2ndArrayList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);

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

        1stArrayList = new ArrayList<>();
        1stArrayList .add("A");
        1stArrayList .add("B");
        1stArrayList .add("C");

        2ndArrayList = new ArrayList<>();
        2ndArrayList.add("1");
        2ndArrayList.add("2");
        2ndArrayList.add("3");

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.item, 1stArrayList);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                String 2ndArrayList= listView.getItemAtPosition(position).toString();
                SharedPreferences settings = getSharedPreferences("PREFS", 0);
                SharedPreferences.Editor editor = settings.edit();
                editor.putString("2ndArrayList ", 2ndArrayList );
                editor.apply();

                Intent intent = new Intent(getApplicationContext(), ThirdActivity.class);
                startActivity(intent);
            }
        });

    }
}

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是使用单击视图的位置直接从数组中获取值。如下所示:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            String secListItem = secArrayList.get(position);
            SharedPreferences settings = getSharedPreferences("PREFS", 0);
            SharedPreferences.Editor editor = settings.edit();
            editor.putString("2ndArrayList", secListItem );
            editor.apply();

            Intent intent = new Intent(getApplicationContext(), ThirdActivity.class);
            startActivity(intent);
        }
    });

但是你必须确保这两个数组的大小相同,或者你可能有一个IndexOutOfBoundsException

另一个解决方案是使用带有arraylist1和arraylist2值的Map,实现扩展BaseAdapter的自定义适配器,使用getView()使用第一个数组中的值填充视图,并使用getItem()返回来自第二个清单,但这更难做到。

此外,如果您不是要保留该项目并仅在活动之间进行转移,则可以使用Intent来执行此操作。这样:

Intent intent = new Intent(getApplicationContext(), ThirdActivity.class);
Intent.putExtra("2ndArrayList", secListItem);
startActivity(intent);

并在第三项活动中恢复,例如:

String secArrayItem = "";
Bundle extras = getIntent().getExtras();
if (extras != null) secArrayItem = extras.getString("2ndArrayList");