使用switch-case时,Android Listview onClickItemListener无法正常工作

时间:2016-06-23 03:57:17

标签: android listview onitemclicklistener

我有一个带有多种类型的对象项的ListView(示例:人1,人2,人3,动物1,动物2,动物3,运输1 ,运输2,运输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;
    }
}

2 个答案:

答案 0 :(得分:0)

您是否可以尝试在listview的onItemClickListener方法内而不是值中切换位置。

答案 1 :(得分:0)

试试这个,

替换

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

。通过

 ItemModel item = list.get(position);