커스텀 리스트뷰에서 각각의 이미지를 체크할 경우 다른화면에서 각각의 다른 정보를 출력하려고 합니다.
기존의 리스트뷰에 이미지기능을 넣으니 4시간째 응답없음이 뜨는데 왜이런건지 궁금합니다..
읽어주셔서 감사합니다. 좋은하루되세요.
public class MainActivity extends AppCompatActivity {
private ListView lv;
private ArrayList<Model> modelArrayList;
private CustomAdapter customAdapter;
private Button btnselect, btndeselect, btnnext;
//아이템 이름
private String[] itemText = new String[]{"Lion", "Tiger", "Leopard", "Cat"};
// 정보
private String[] itemName = new String[]{"a", "b", "c", "d"};
//이미지
private int[] itemIcon = new int[] {R.drawable.a1, R.drawable.a1, R.drawable.a1, R.drawable.a1};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
btnselect = (Button) findViewById(R.id.select);
btndeselect = (Button) findViewById(R.id.deselect);
btnnext = (Button) findViewById(R.id.next);
customAdapter = new CustomAdapter(this,modelArrayList);
lv.setAdapter(customAdapter);
btnselect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
modelArrayList = getModel(true);
customAdapter = new CustomAdapter(MainActivity.this,modelArrayList);
lv.setAdapter(customAdapter);
}
});
btndeselect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
modelArrayList = getModel(false);
customAdapter = new CustomAdapter(MainActivity.this,modelArrayList);
lv.setAdapter(customAdapter);
}
});
btnnext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,NextActivity.class);
startActivity(intent);
}
});
}
private ArrayList<Model> getModel(boolean isSelect){
ArrayList<Model> list = new ArrayList<>();
//표시할 아이템 갯수
for(int i = 0; i < 5; i++){
Model model = new Model();
model.setSelected(isSelect);
model.setText(itemText[i]);
model.setName(itemName[i]);
model.setIcon(itemIcon[i]);
list.add(model);
}
return list;
}
}
public class Model {
private boolean isSelected;
private String text;
private String name;
int icon;
// 제목
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
//체크박스
public boolean getSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
// 정보
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//이미지
public void setIcon(int icon) {
this.icon = icon ;
}
public int getIcon() {
return this.icon;
}
}
public class CustomAdapter extends BaseAdapter {
private Context context;
public static ArrayList<Model> modelArrayList;
public CustomAdapter(Context context, ArrayList<Model> modelArrayList) {
this.context = context;
this.modelArrayList = modelArrayList;
}
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getCount() {
return modelArrayList.size();
}
@Override
public Object getItem(int position) {
return modelArrayList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder(); LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.lv_item, null, true);
holder.checkBox = (CheckBox) convertView.findViewById(R.id.cb);
holder.txtView = (TextView) convertView.findViewById(R.id.name);
holder.imageView = (ImageView) convertView.findViewById(R.id.imageview1);
convertView.setTag(holder);
}else {
}
holder.txtView.setText(modelArrayList.get(position).getText());
holder.checkBox.setChecked(modelArrayList.get(position).getSelected());
holder.checkBox.setTag(R.integer.btnplusview, convertView);
holder.checkBox.setTag( position);
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View tempview = (View) holder.checkBox.getTag(R.integer.btnplusview);
TextView tv = (TextView) tempview.findViewById(R.id.name);
Integer pos = (Integer) holder.checkBox.getTag();
Toast.makeText(context, "itemText"+ pos +"clicked!", Toast.LENGTH_SHORT).show();
if(modelArrayList.get(pos).getSelected()){
modelArrayList.get(pos).setSelected(false);
}else {
modelArrayList.get(pos).setSelected(true);
}
}
});
return convertView;
}
private class ViewHolder {
protected CheckBox checkBox;
private TextView txtView;
private ImageView imageView;
}
}
values > integer.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="btnplusview">1</integer>
<integer name="btnpluspos">2</integer>
</resources>