2016-06-23 2 views
1

У меня есть ListView с множественного типа элемента объекта (пример: Person 1, человек 2, человек 3, животные 1, животные 2, Animal 3, Транспорт 1 , Transport 2, Transport 3), я хочу показать детальную информацию о другом мероприятии при нажатии на ListView item, я попытался сделать это с помощью switch-case, но он не работает. Большое спасибо за поддержку.Android ListView onClickItemListener не работает при использовании переключателя - случай

Это 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(); 
      } 
     }); 

    } 


} 

EDIT: Это 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 

UPDATE: Я определил метод 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; 
    } 
} 
+0

Вы можете также разместить трассировки стека. – aditya

+0

ya, пожалуйста, разместите свой журнал cat ... – Riten

+0

@Riten Я обновил logcat. Вы можете мне помочь? –

ответ

0

Вы можете попробовать и сделать переключатель на позицию вместо внутри метода onItemClickListener в ListView вместо значения.

+0

Спасибо @aditya, но я неясен, можете ли вы направить меня больше? –

+0

@TrinhLK, я предположил, что внутри функции handleEvent может возникнуть ошибка, когда вы делаете переключатель по значению. Если вы можете опубликовать StackTrace (данные об ошибке logcat), я могу помочь вам решить эту проблему. – aditya

+0

Я обновил logcat, вы можете исправить это? Благодаря! –

0

Попробуйте это,

Заменить

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

С

ItemModel item = list.get(position); 
+0

Спасибо @Pramod, но он все еще не работает. :( –

+0

Можете ли вы проверить результат 'int value = item.getIcon();' –

+0

Я пробовал debug, и я думаю, что что-то не так в блоке case-case –