gpt4 book ai didi

android - isChecked() 行为在 2.3.6 和 4.2 android 版本中完全相反

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:55:01 26 4
gpt4 key购买 nike

我正在开发一个简单的 Android 应用程序,它创建一个带有复选框的 ListView,如下所示

listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice,results);
this.setListAdapter(listAdapter);
ListView lv = getListView();
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
CheckedTextView check = (CheckedTextView)view;
//The below code needed for running on AVD version 4.2
if(check.isChecked()) {
// Checkbox checked do something
}
else {
// Not checked. Do something
}
/* Exact opposite need on Samsung phone running 2.3.6
if(!check.isChecked()) {
// Checkbox checked do something
}
else {
// Not checked. DO something
} */

这真的很奇怪。当两个版本需要完全相反的检查时,应用程序将如何与这两个版本兼容?

请告诉我如何处理这个问题。任何帮助将不胜感激。

最佳答案

我知道这个问题,在较新的框架上,onItemClick 在复选框的 checkd 属性更改之前调用!

我在点击项目后检查我的复选框的选中状态(例如,在 Activity 关闭或保存按钮点击时)。

看看 list.getCheckedItemPositions()...它会返回一个 SparseBooleanArray 你可以使用!

编辑:例子

public class MyMultiChoiceActivity extends Activity implements View.OnClickListener {

private ListView list = null;
private boolean savedSelectionInvalid = true;
private List<Integer> selectedIds = new ArrayList<Integer>();

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

this.setContentView(R.layout.entry_data_multi_choice_filter);

//initialize the list
list = (ListView) findViewById(R.id.list);
listAdapter = new MyListAdapterClass(this, R.layout.list_item_multiple_choice);
list.setAdapter(listAdapter);

//onclick on a item, set the selectaion as invalid
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
savedSelectionInvalid = true;
}
});

list.setAdapter(listAdapter);

//...
}

//...

private void validateChecked() {
if(savedSelectionInvalid == true) {
SparseBooleanArray checkedItemlist = list.getCheckedItemPositions();
selectedIds.clear();
for (int i=0; i < checkedItemlist.size(); i++){

if (checkedItemlist.valueAt(i)) {
selectedIds.add(a.keyAt(i));
}
}
this.savedSelectionInvalid = false;
}
}

//...

//this method se
private void saveAndClose() {
validateChecked();

//now you have the selectedIds filled with every checked item key!

this.finish();
}
}

关于android - isChecked() 行为在 2.3.6 和 4.2 android 版本中完全相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947084/

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