-1

以下に、リストビューをスクロールしているときに実際にコードを記述しました。チェックボックスは元の位置にあり、コードによる助けがあれば幸いです。

 cp.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
        // TODO Auto-generated method stub
        cp.setChecked(true);
        cx.setChecked(false);

        ck.setChecked(false);
        int a=1;

        String c=getListView().getItemAtPosition(position).toString();
        updatetable(c, "FULL");
        //Toast.makeText(getApplicationContext(), c+"full", Toast.LENGTH_LONG).show();
        // Toast.makeText(getApplicationContext(), "year", Toast.LENGTH_LONG).show();
    }
});

 cx.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {

        // TODO Auto-generated method stub
        cx.setChecked(true);
        cp.setChecked(false);
        ck.setChecked(false);
        int a=1;
        String c=getListView().getItemAtPosition(position).toString();
        updatetable(c, "CRITICAL");

        //Toast.makeText(getApplicationContext(), c+"ok", Toast.LENGTH_LONG).show();
    }
});

 ck.setOnClickListener(new OnClickListener() {

        public void onClick(View v)  {
            ck.setOnCheckedChangeListener(null);
            // TODO Auto-generated method stub
            ck.setChecked(true);
            cp.setChecked(false);
            cx.setChecked(false);
            int a=1;
    String c=getListView().getItemAtPosition(position).toString();
    updatetable(c, "FINISH");
            //Toast.makeText(getApplicationContext(), c+"fineshed", Toast.LENGTH_LONG).show();
        }
    });
4

1 に答える 1

0

あなたの質問は明確ではありませんが、問題は解決したと思います。

これは問題ではないと思いますCheckBox。アダプターに何か問題があると思います。

public class MyAdapter extends BaseAdapter {
    private List<Something> mList;
    private Context mContext;

    public MyAdapter(Context context, List<Something> list) {
        mContext = context;
        mList = list;
    }

    @Override
    public int getCount() {
        return mList.getSize();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_layout, null);
        }

        CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.checkbox);
        /* Here you should set your checkbox state */
    }
}

私はあなたの問題だと思いますconvertView

下にスクロールするとListView、ポップアップしたアイテムは破棄されずにリサイクルされます。リサイクル品は としてお返ししconvertViewます。convertView はクリーニングされていないためCheckBox、ポップアウトされたアイテムのin がチェックされていた場合、 CheckBoxinconvertViewがチェックされます。

すべてのアイテムList<Boolean> statesの状態を保存する場所を維持する必要があります。CheckBoxそれで:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_layout, null);
        }

        CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.checkbox);
        checkBox.setChecked(states.get(position));
    }

私はあなたのコードを持っていないので、上記の例は可能な限り一般的です。コードを見せていただければ、お手伝いできます。

于 2012-07-20T11:44:05.940 に答える