gpt4 book ai didi

android - 使用 CursorAdapter 的 ListView 中的复选框

转载 作者:太空狗 更新时间:2023-10-29 15:04:47 27 4
gpt4 key购买 nike

我的 MainActivity 包含一个 ListView 和一个启动 DetailsActivity 的菜单项。 DetailsActivity 可以将项目添加到填充 ListView 的数据库中。以下是对我造成问题的用例的描述:

  1. 启动MainActivity
  2. 检查列表中的一些项目。
  3. 启动 DetailsActivity
  4. 将项目添加到数据库。
  5. 按后退按钮返回到 MainActivity

在此序列结束时,即使我尝试恢复它们的状态,步骤 2 中的检查都不会保留。

MainActivity.onPause() 和 MainActivity.onResume():

@Override
public void onPause() {
super.onPause();

this.savedSelection = this.adapter.getSelection();
}
@Override
public void onResume() {
super.onResume();

// restore default header state
CheckedTextView headerCheck = (CheckedTextView) this.headerView
.findViewById(R.id.checkmark);
headerCheck.setChecked(false);

boolean[] newSelection = new boolean[this.adapter.getCount()];

if (this.savedSelection != null) {
// copy old selection array into new selection array
int numSelected = 0;
for (int i = 0; i < this.savedSelection.length; i++) {
newSelection[i] = this.savedSelection[i];

if (newSelection[i]) {
numSelected++;
}

View row = this.listView.getChildAt(i + 1);

if (row != null) {
CheckedTextView checkbox = (CheckedTextView) row
.findViewById(R.id.checkmark);
checkbox.setChecked(newSelection[i]);

TextView playerText = (TextView) row
.findViewById(R.id.player_name_text_view);
Log.d(TAG, playerText.getText().toString() + " checked? "
+ checkbox.isChecked());
}
}

// restore header state
if (numSelected == newSelection.length) {
headerCheck.setChecked(true);
}

}

// restore state
this.adapter.setSelection(newSelection);
}

MyAdapter.getView():

public View getView(final int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);

CheckedTextView ctv = (CheckedTextView) v.findViewById(R.id.checkmark);
final Activity curActivity = (Activity) this.context;

// restore selection
if (this.selection != null) {
ctv.setChecked(this.selection[position]);
}

// set listener
ctv.setOnClickListener(new OnClickListener() {

@SuppressLint("NewApi")
@Override
public void onClick(View v) {
CheckedTextView cview = (CheckedTextView) v
.findViewById(R.id.checkmark);
cview.toggle();
BaseballCardAdapter.this.selection[position] = cview
.isChecked();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
curActivity.invalidateOptionsMenu();
}

}

});

return v;
}

最佳答案

我认为如果使用 savedInstanceState 并在 onCreate 方法中设置 this.savedSelection 会更好。像这样:

@Override
protected void onSaveInstanceState (Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBooleanArray(SOME_CONSTANT_STRING,this.savedSelection);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState!=null) {
this.savedSelection=savedInstanceState.getBooleanArray(SOME_CONSTANT_STRING);
}
}

我相信您的其余代码应该可以正常工作。

关于android - 使用 CursorAdapter 的 ListView 中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23048590/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com