【问题标题】:How to start a specific new activity upon click in listview如何在列表视图中单击后开始特定的新活动
【发布时间】:2020-05-18 09:42:35
【问题描述】:

我希望创建一个包含 100 多个条目/活动的列表。单击列表的任何条目后,应该会打开一个活动,我设法执行以下操作:

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

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

其余代码:

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

【问题讨论】:

    标签: java android listview onclicklistener


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      向意图添加额外内容怎么样?

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

      如果像这样开始活动,你可以处理位置:

      intent.getIntExtra("position", 0);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        相关资源
        最近更新 更多