0

OK私は問題を言い換えています、

複数のレイアウトを持つカスタムBaseAdaptorがありますが、リスト行が選択されているときにチェックボックスを選択する際に問題が発生します。

実際には、レイアウトを使用する最初の行では機能しませんが、他の行は私が望むとおりに機能します。

***編集いくつかのコードを追加する時間:私のメインクラス:

myAdaptor = new ListAdapter(this, myValues);
    listview.setAdapter(myAdaptor);
    Log.d("SettingsScreen", "Setup listview click");
    listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> l, View v, int pos, long arg3) {
            if (pos == 1) {
                myAdaptor.displayNeedle.setChecked(!myAdaptor.displayNeedle
                        .isChecked());
            } else if (pos == 2) {
                accent1st.setChecked(!accent1st.isChecked());
            } else if (pos == 3) {
                myAdaptor.wakeLock.setChecked(!myAdaptor.wakeLock
                        .isChecked());
            } else if (pos == 4) {
                tapTimeSig.setChecked(!tapTimeSig.isChecked());
            }
        }
    });

}

私のカスタムアダプター:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        int type = layoutType[position];
        holder = null;
        holder = new ViewHolder();

        if (convertView == null) {
            holder = new ViewHolder();
            switch (type) {
            case 0:
                convertView = mInflater.inflate(R.layout.tickbox, null);
                holder.textView = (TextView) convertView
                        .findViewById(R.id.label);
                if (position == 1) {
                    displayNeedle = (CheckBox) convertView
                            .findViewById(R.id.mycheckbox);
                    displayNeedle
                            .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                                @Override
                                public void onCheckedChanged(
                                        CompoundButton arg0, boolean arg1) {
                                    getData().setDisplayNeedle(
                                            !getData().getDisplayNeedle());
                                }
                            });
                }
                else if (position == 2) {
                    accent1st = (CheckBox) convertView
                            .findViewById(R.id.mycheckbox);
                    accent1st.setChecked(getData().getAccentBeat(0));
                    accent1st
                            .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                                @Override
                                public void onCheckedChanged(
                                        CompoundButton arg0, boolean arg1) {
                                    getData().setAccentBeat(0,
                                            accent1st.isChecked());
                                }
                            });
                }
                if (position == 3) {
                    wakeLock = (CheckBox) convertView
                            .findViewById(R.id.mycheckbox);
                    wakeLock.setChecked(getData().getWakeLock());
                    if (!getData().getPro()) {
                        wakeLock.setEnabled(false);
                        values[3] += " (Pro version only)";
                    }
                    wakeLock.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton arg0,
                                boolean arg1) {
                            if (getData().getPro())
                                getData().setWakeLock(wakeLock.isChecked());
                        }
                    });
                }
                if (position == 4) {
                    tapTimeSig = (CheckBox) convertView
                            .findViewById(R.id.mycheckbox);
                    tapTimeSig.setChecked(getData().getTapTimeSig());
                    tapTimeSig
                            .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                                @Override
                                public void onCheckedChanged(
                                        CompoundButton arg0, boolean arg1) {
                                    getData().setTapTimeSig(
                                            tapTimeSig.isChecked());
                                }
                            });
                }
                break;

これまでのサポートに感謝します、私はこれにあまりにも長い間、例えば数週間立ち往生しています!そして、私はそれが正しく機能するようにしたいと思っています。

4

1 に答える 1

0

私はあなたがそれを行うことができると思います:

yourListView.setOnItemClickListener(new OnItemClickListener() {
   @Override
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
        for(int i=0;i<parent.getCount();i++){
            View v=parent.getChildAt(parent.getCount()-1-i);
            if (position == i) {
                v.setBackgroundColor(Color.RED);//highlight color
            } else {
                v.setBackgroundColor(Color.TRANSPARENT);//not highlight color
            }
        }
    }
});

それが役立つことを願っています。

于 2012-08-02T05:34:22.093 に答える