【问题标题】:Android Listview onClickItemListener not working when using switch - caseAndroid Listview onClickItemListener 在使用开关时不起作用 - 案例
【发布时间】:2016-06-23 03:57:17
【问题描述】:

我有一个 ListView,其中包含多种类型的对象项示例:Person 1、Person 2、Person 3、Animal 1、Animal 2、Animal 3、Transport 1 ,Transport 2,Transport 3),我想在单击ListView item 时显示另一个活动的项目详细信息,我尝试使用switch-case 来做到这一点,但它不起作用。非常感谢大家的支持。

这是MainActivity

package com.training.trinhlk.exercise_8;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.training.trinhlk.exercise_8.adapter.RandomListAdapter;
import com.training.trinhlk.exercise_8.entity.Animal;
import com.training.trinhlk.exercise_8.entity.ItemModel;
import com.training.trinhlk.exercise_8.entity.Person;
import com.training.trinhlk.exercise_8.entity.Transport;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private List<ItemModel> listItemModel;
    private ArrayList<ItemModel> list;
    private ListView lvItem;
    ImageView ivPhoto, ivIcon;
    TextView tvName, tvAge;
    private String [] name;
    private String [] imgUrl;
    private int [] age;
    private int select;
    RandomListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        fillData();
        handleEvent();
    }

    public void init() {
        lvItem = (ListView) findViewById(R.id.lv_random_item);
        ivPhoto = (ImageView) findViewById(R.id.iv_photo);
        tvName = (TextView) findViewById(R.id.tv_name);
        tvAge = (TextView) findViewById(R.id.tv_age);
        ivIcon = (ImageView) findViewById(R.id.iv_icon);

        listItemModel = new ArrayList<>();

    }

    public void fillData() {
        listItemModel = getListData();
        adapter = new RandomListAdapter(this,list);
        lvItem.setAdapter(adapter);

    }

    public  void handleEvent () {
        lvItem.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                select = position;
                ItemModel item = (ItemModel) lvItem.getItemAtPosition(position);
                int value = item.getIcon();
                switch (value) {
                    case 0: {
                        Intent personIntent = new Intent(MainActivity.this, EditPersonActivity.class);
                        startActivityForResult(personIntent, 0);
                    }
                        break;
                    case R.drawable.like: {
                        Intent animalIntent = new Intent(MainActivity.this, EditAnimalActivity.class);
                        startActivityForResult(animalIntent, 1);
                    }
                        break;
                    case R.drawable.star: {
                        Intent transportIntent = new Intent(MainActivity.this, EditTransportActivity.class);
                        startActivityForResult(transportIntent, 2);
                    }
                        break;

                }
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        ItemModel item = (ItemModel) lvItem.getItemAtPosition(select);
        switch (requestCode) {
            case 0: {
                Person person = new Person();
                String personName = data.getStringExtra("Name");
                item.setName(personName);
                person.setName(personName);
                String job = data.getStringExtra("Job");
                person.setJob(job);
                String personMove = data.getStringExtra("Move");
                item.setMove(personMove);
                person.setMove(personMove);
                adapter.notifyDataSetChanged();
            }
            break;

            case 1: {
                Animal animal = new Animal();
                String animalName = data.getStringExtra("Name");
                item.setName(animalName);
                String animalFeed = data.getStringExtra("Feed");
                animal.setFeed(animalFeed);
                String animalMove = data.getStringExtra("Move");
                item.setMove(animalMove);
                adapter.notifyDataSetChanged();
            }
            break;

            case 2: {
                Transport transport = new Transport();
                String tsName = data.getStringExtra("Name");
                item.setName(tsName);
                transport.setName(tsName);
                String tsFuel = data.getStringExtra("Fuel");
                transport.setFuel(tsFuel);
                String tsMove = data.getStringExtra("Move");
                item.setMove(tsMove);
                transport.setMove(tsMove);
                adapter.notifyDataSetChanged();
            }
            break;
        }
    }

    private ArrayList<ItemModel> getListData () {
        list = new ArrayList<ItemModel>();
        imgUrl = getResources().getStringArray(R.array.image_url);
        name = getResources().getStringArray(R.array.name);
        age = getResources().getIntArray(R.array.age);

        for(int i = 0; i < imgUrl.length; i++) {
            ItemModel item = new ItemModel();
            item.setImgURL(imgUrl[i]);
            item.setName(name[i]);
            item.setAge(age[i]);
            item.setIcon(i);
            list.add(item);
        }
        Collections.shuffle(list);
        return list;
    }

}

这是另一个显示项目详细信息的活动

package com.training.trinhlk.exercise_8;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Created by TRINH LK on 22/06/2016.
 */
public class EditPersonActivity extends AppCompatActivity{
    ImageView ivPerson;
    EditText etName, etJob, etMove;
    TextView tvAge;
    Button btnConfirm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_item_person);
        initView();
        getData();
    }

    public void initView() {
        ivPerson = (ImageView) findViewById(R.id.iv_photo_person);
        etName = (EditText) findViewById(R.id.et_name_person);
        tvAge = (TextView) findViewById(R.id.tv_age_person);
        etJob = (EditText) findViewById(R.id.et_job_person);
        etMove = (EditText) findViewById(R.id.et_move_person);
        btnConfirm = (Button) findViewById(R.id.btn_confirm);
    }

    public void getData(){
        btnConfirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent personIntent = new Intent();
                String name = etName.getText().toString();
                personIntent.putExtra("Name",name);
                String job = etJob.getText().toString();
                personIntent.putExtra("Job",job);
                String move = etMove.getText().toString();
                personIntent.putExtra("Move", move);
                setResult(0, personIntent);
                finish();
            }
        });

    }


}

编辑:这是 logcat

06-23 11:03:26.937 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.937 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.947 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.media.session.MediaController', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.947 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.widget.Toolbar', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.957 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.ActivityManager$TaskDescription', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.967 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.967 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.977 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.987 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.assist.AssistContent', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.987 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.view.SearchEvent', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:26.997 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:03:31.882 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.882 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.882 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.media.session.MediaController', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.882 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.widget.Toolbar', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.882 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.ActivityManager$TaskDescription', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.892 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.892 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.902 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.912 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.assist.AssistContent', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.912 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.view.SearchEvent', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:03:31.912 2362-2362/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:14:36.550 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.550 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.560 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.media.session.MediaController', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.560 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.widget.Toolbar', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.560 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.ActivityManager$TaskDescription', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.570 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.570 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.580 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.580 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.assist.AssistContent', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.590 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.view.SearchEvent', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:14:36.590 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:15:01.354 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.354 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.354 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.media.session.MediaController', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.364 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.widget.Toolbar', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.364 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.ActivityManager$TaskDescription', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.374 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.374 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.384 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.394 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.assist.AssistContent', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.394 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.view.SearchEvent', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:15:01.404 12478-12478/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:25.163 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.163 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.163 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.media.session.MediaController', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.163 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.widget.Toolbar', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.173 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.ActivityManager$TaskDescription', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.183 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.183 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.193 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.193 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.assist.AssistContent', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.193 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.view.SearchEvent', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:25.203 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.MainActivity.access$super
06-23 11:18:53.201 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.211 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.211 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.media.session.MediaController', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.211 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.widget.Toolbar', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.221 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.ActivityManager$TaskDescription', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.221 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.221 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.231 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.SharedElementCallback', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.241 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.app.assist.AssistContent', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.241 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.view.SearchEvent', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super
06-23 11:18:53.251 16601-16601/com.training.trinhlk.exercise_8 E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.training.trinhlk.exercise_8.EditPersonActivity.access$super

更新:我在此定义了方法getIcon

package com.training.trinhlk.exercise_8.entity;

/**
 * Created by TRINH LK on 07/06/2016.
 */
public class ItemModel {

    private String imgURL;
    private String name;
    private int age;
    private String move;
    private int icon;


    public ItemModel() {

    }

    public String getImgURL() {
        return imgURL;
    }

    public void setImgURL(String imgURL) {
        this.imgURL = imgURL;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getMove() {
        return move;
    }

    public void setMove(String move) {
        this.move = move;
    }

    public int getIcon() {
        return icon;
    }

    public void setIcon(int icon) {
        this.icon = icon;
    }
}

【问题讨论】:

  • 你也可以发布堆栈跟踪吗?
  • 请张贴你的日志猫...
  • @Riten 我更新了 logcat。你能帮帮我吗?

标签: android listview onitemclicklistener


【解决方案1】:

您能否尝试在列表视图的 onItemClickListener 方法中而不是值中进行位置切换。

【讨论】:

  • 谢谢@aditya,但我不清楚,你能指导我更多吗?
  • @TrinhLK,我推测当您在值上进行切换时,handleEvent 函数内部可能存在错误。如果您可以发布 StackTrace(错误的 logcat 详细信息),我可以帮助您解决这个
  • @Trinh 我仍然无法找出错误。如果有帮助,我可以分享您尝试做的代码。
【解决方案2】:

试试这个,

替换

 ItemModel item = (ItemModel) lvItem.getItemAtPosition(position);

 ItemModel item = list.get(position);

【讨论】:

  • 你能检查int value = item.getIcon();的结果吗
  • 我试过调试,我认为 switch-case 块有问题
  • Toast int value = item.getIcon(); 这个值,让我知道结果。谢谢
  • 谢谢@Pramod,我找到了原因,但我还有另一个问题,我有一个包含 9 项 3 种不同类型对象的列表视图,例如:人 1、人 2、人 3、动物 1、动物 2,动物 3,运输 1,运输 2,运输 3,我如何知道单击时一个项目的类型对象,假设人 1、2、3 没有图标,动物 1、2、3 有星形图标, Transport 1,2,3 有like icon
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
相关资源
最近更新 更多