我正在编写一个程序,其中包含当前安装在手机上的应用程序列表,可从辅助活动访问。此活动创建当前安装的应用程序列表,检查它们是否在静态列表中,如果是,则在任何用户交互之前检查这些项目。然后,用户可以通过点击以检查项目然后被添加到静态列表来与列表交互。
我使用simple_list_item_checked和setItemChecked()函数在给定索引号的情况下将特定项设置为已检查。这在早期工作得非常好(我相信adt捆绑的旧版本)。当我将adt包升级到最新的迭代时(由于adt和android版本之间的一些兼容性问题我不得不通过eclipse进行),它不再有效。
我已经包含了以下代码。有问题的部分被标记。我已经包含了其余部分,以便提供上下文和数据类型。
我已经在这个问题上苦苦挣扎了几个星期而无济于事。
先谢谢!
public static ArrayAdapter<String> arrayAdapterList = null;
public static String[] myStaticList = {};
public static String[] mypackages;
ListView myListView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
/* Some Initialization code here
* .....
* .....
*/
arrayAdapterList = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, mypackages);
myListView.setAdapter(arrayAdapterList);
// OnClickListener checks and unchecks the item as well as add/remove
// from the static list
myListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
/* The item is checked/unchecked as well as added/removed from the static list
* .......
* .......
*/
}
});
/**** PROBLEMATIC CODE SEGMENT *****/
if (myStaticList.length <= 0) {
Log.d("DEBUG", "Zero Count");
for (int i = 0; i < myListView.getCount(); i++) {
myListView.setItemChecked(i, false);
}
} else {
Log.d("DEBUG", "Non Zero Count " + myStaticList.length);
for (int i = 0; i < myListView.getCount(); i++) {
boolean shouldCheck = false;
String temp = (String) myListView.getItemAtPosition(i);
for (String s : myStaticList) {
if (temp.equals(s)) {
shouldCheck = true;
break;
}
}
/* The program does reach up to this point and even executes
* the setItemChecked() but no change occurs in the actual list item.
*/
Log.d("DEBUG", "Checked: " + shouldCheck);
myListView.setItemChecked(i, shouldCheck);
}
}
}