Android 사용자 정의 listview,삭제 추가.

7020 단어 기록 하 다.
엄밀 하지 않 고 규범 에 맞지 않 으 며 개인 기록 사용.
public class Base extends BaseAdapter {
    private List> list;
    private LayoutInflater inflater;

    Base(Context context, List> list1) {
        this.list = list1;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        viewhode hode = new viewhode();
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list_item, null);
            hode.textView = (TextView) convertView.findViewById(R.id.item_1);
            hode.textView2 = (TextView) convertView.findViewById(R.id.item_2);
            hode.checkBox = (CheckBox) convertView.findViewById(R.id.item_3);
            convertView.setTag(hode);
        } else {
            hode = (viewhode) convertView.getTag();
        }
        String a = list.get(position).get("tj").toString();
        String b = list.get(position).get("todo").toString();
        hode.textView.setText(a);
        hode.textView2.setText(b);
        return convertView;
    }

    public final class viewhode {
        private TextView textView, textView2;
        private CheckBox checkBox;
    }

}

Base 에 게 초기 에 Layoutinflater 와 매개 변 수 를 전달 하 는 list 를 정의 합 니 다(Hashmap 과 Map 의 작은 차이 가 있 는 것 같 습 니 다?).view hoder 를 다시 쓰 고 필요 한 컨트롤 을 정의 합 니 다(여 기 는 2 개의 Textview 를 사 용 했 습 니 다).하나의 checkbox(삭제 에 사 용 됩 니 다).getview 방법 에서 view hode 를 예화 하고 빈 view 를 판단 하 며 빈 경우 inflater 로 작성 한 xml 파일 을 채 우 고 findviewby id 를 예화 합 니 다.view 에 tag 설정 하기;else 재 활용 직접 가 져 오기;tag 를 확보 한 후 list 에서 데 이 터 를 가 져 와 해당 하 는 곳 으로 불 러 옵 니 다.view 되 돌리 기;부분 추가:
base = new Base(getActivity(), list);
                add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                HashMap<String, Object> map = new HashMap<String, Object>();
                map.put("tj", sp1.getSelectedItem().toString());
                map.put("todo", sp2.getSelectedItem().toString());
                list.add(map);
                base.notifyDataSetChanged();
            }
        });

list 를 업데이트 하고 notify 를 동기 화 합 니 다.
삭제
del.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int max = listView.getChildCount();
                for (int i = max - 1; i >= 0; i--) {
                    View view = listView.getChildAt(i);
                    CheckBox checkBox = (CheckBox) view
                            .findViewById(R.id.item_3);
                    if (checkBox.isChecked()) {
                        list.remove(i);
                        checkBox.setChecked(false);
                    }
                }
                base.notifyDataSetChanged();
            }
        });

listview 의 총 수 를 가 져 옵 니 다.거꾸로,최대-1 부터 0,i 까지;for 순환 내 에서 listview 하위 열 에 대응 하 는 view 를 예화 합 니 다.view 를 통 해 해당 하 는 checkbox 를 연결 하여 선택 여 부 를 판단 하고 선택 하면 해당 list 를 삭제 하 며 checkbox 를 선택 하지 않 은 상태 로 설정 하여 notify 새로 고침 을 호출 합 니 다.
bug:많이 추가 되 었 습 니 다.listview 를 미 끄 러 뜨 릴 때 체크 상자 의 체크 는 마구 뛰 어 다 닙 니 다(해결 가능,찾 을 수 없습니다).한 번 은 삭 제 된 줄 이 선택 한 줄 이 아 닌 것 을 만 났 습 니 다.

좋은 웹페이지 즐겨찾기