마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

커스텀 리스트뷰 이미지 출력에 질문이 있습니다!

0 추천

커스텀 리스트뷰에서 각각의 이미지를 체크할 경우 다른화면에서 각각의 다른 정보를 출력하려고 합니다.

기존의 리스트뷰에 이미지기능을 넣으니 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>

 

익명사용자 님이 2017년 7월 26일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...