如何在列表视图中单击后启动特定的新 activity

How to start a specific new activity upon click in listview

我想创建一个包含 100 多个 entries/activities 的列表。单击列表中的任何条目后,应该会打开一个 activity,我设法做到了,如下所示:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if(position==0){
                    Intent intent0 = new Intent(view.getContext(), first.class);
                    startActivityForResult(intent0,0);
                }
                else if(position==1){
                    Intent intent1 = new Intent(view.getContext(), second.class);
                    startActivityForResult(intent1,0);
                }

但为了更轻松地浏览列表,我通过以下方式按字母顺序对列表进行了排序:

        Collections.sort(ListOfObjects, new Comparator<String[]>() {
            @Override
          public int compare(String[] o1, String[] o2) {
              return o1[0].compareToIgnoreCase(o2[0]);
          }
        });

这会导致问题,即在单击一个条目时,无论是哪个条目,都会打开链接到该位置的 activity,但不会打开链接到该条目的 activity。 所以我的问题是如何根据条目的点击 entry/name 而不是根据条目的位置打开特定的 activity? 我很乐意提供任何帮助。

其余代码:

super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ListView listView = findViewById(R.id.Objektliste);
        searchView = findViewById(R.id.Searchview);

        final ArrayList<String[]> ListOfObjects = new ArrayList<>();

        arrayAdapter = new ArrayAdapter<String[]>(this, android.R.layout.simple_list_item_2, android.R.id.text1, ListOfObjects){

// Code for subitem

            @Override
            public View getView(int position, View convertView, ViewGroup parent){
                View view = super.getView(position, convertView, parent);

                String[] entry  = ListOfObjects.get(position);
                TextView text1 = view.findViewById(android.R.id.text1);
                TextView text2 = view.findViewById(android.R.id.text2);
                text1.setText(entry[0]);
                text2.setText(entry[1]);

                return view;

            }
        };

listView.setAdapter(arrayAdapter);

//a searchbar/filter which doesnt work either but thats for another day
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                arrayAdapter.getFilter().filter(newText);
                return false;
            }
        });

//Items and subitems put into my list
        ListOfObjects.add(new String[] {"first", "first1"});
        ListOfObjects.add(new String[] {"second","second1"});
        ListOfObjects.add(new String[] {"third","third1"});
//and so on

//sort
        Collections.sort(ListOfObjects, new Comparator<String[]>() {
            @Override
          public int compare(String[] o1, String[] o2) {
              return o1[0].compareToIgnoreCase(o2[0]);
          }
        });

//onClick
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if(position==0){
                    Intent intent0 = new Intent(view.getContext(), first.class);
                    startActivityForResult(intent0,0);
                }
                else if(position==1){
                    Intent intent1 = new Intent(view.getContext(), second.class);
                    startActivityForResult(intent1,0);
                }
                else if(position==2){
                    Intent intent2 = new Intent(view.getContext(), third.class);
                    startActivityForResult(intent2,0);
                }
                else if(position==3){
                    Intent intent3 = new Intent(view.getContext(), fourth.class);
                    startActivityForResult(intent3,0);
                }
            }
        });
    }
}

如何在意图中添加额外内容?

Intent intent = new Intent(context, Activity.class);
intent.putExtra("position", position);
startActivityForResult(intent, 0);

如果这样开始activity,你可以处理仓位:

intent.getIntExtra("position", 0);

ListOfObjects 是适配器用来填充视图的 ArrayList。所以在 setOnItemClickListener 中你可以简单地使用:

if(ListOfObjects.get(position)[0].equals("first")){
        // start fist activity
}
if(ListOfObjects.get(position)[0].equals("second")){
        // start second activity
}