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