我刚刚开始Android开发,我正在努力获得一个自定义列表视图,其中包含一个复选框。我已经创建了一个扩展 Activity 的基类,创建了一个Adapter并覆盖了getView()方法,将复选框添加到listview中。我假设我需要这样做,因为我需要一些与Obj C相当的didSelectRowIndexAtPath
来更新我的模型。请告诉我是否还有其他方法可以做到这一点!
现在在我的基类中,我有以下代码 -
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout);
setContentView(R.layout.facilityscreen);
/* Static Data source */
facilityModel = new FacilityDataModel[2];
facilityModel[0] = new FacilityDataModel();
facilityModel[1] = new FacilityDataModel();
facilityModel[0].setFacilityName("Test 1");
facilityModel[0].setFacilityID("Facid0001");
facilityModel[0].setChecked(false);
facilityModel[1].setFacilityName("Test 2");
facilityModel[1].setFacilityID("Facid0002");
facilityModel[1].setChecked(true);
facilityListView = (ListView) findViewById(R.id.facilityListView);
FacilityScreenAdapter adapter = new FacilityScreenAdapter(this, facilityModel);
facilityListView.setAdapter(adapter);
myPatBtn = (Button) findViewById(R.id.myPatBtn);
myPatBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
int i=0;
i++;
}});
facilityListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
int i=0;
i++;
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
我现在的问题是根本没有调用setOnItemSelectedListener。现在已经挣扎了几个小时,我无法弄清楚为什么它根本不会被调用。
非常感谢任何帮助!
谢谢,
的Teja。
答案 0 :(得分:17)
我知道这是一个过时的答案,但我打算写一下,以防其他一些有同样“问题”的人碰到这个页面:
上述问题的解决方案不是问题而只是误解是ListView.onItemSelected()事件在以下情况下被触发:
1)浏览仿真器 - 交叉手柄或 2)就我的HTC-Hero而言,白色小滚球上的滚动动作。
您不必将活动明确扩展到ListActivity。
这是我的小代码,可以从中检索电话号码 列表视图项内的TextView控件。 当用户触摸列表项或使用
滚动列表时myList.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long i)
{
TextView myPhone = (TextView)view.findViewById(R.id.txtphone);
MakeACall(myPhone.getText().toString());
}
});
myList.setOnItemSelectedListener(new OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> parent, View view, int position, long i)
{
TextView myPhone = (TextView)view.findViewById(R.id.txtphone);
MakeACall(myPhone.getText().toString());
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
我希望这有用......:)
答案 1 :(得分:3)
已经存在一个带复选框的ListView的可能性。
public class List11 extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice, GENRES));
final ListView listView = getListView();
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
private static final String[] GENRES = new String[] {
"Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama",
"Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"
};
}
我从APIDemos获取了这个,因为它是最简单的。然后,您可以使用以下方式获取所选项目:
long[] selectedIds = getListView().getCheckItemIds();
您可能还感兴趣的是列表内部使用的CheckedTextView。
对onListItemClick
问题的部分内容
尝试从ListActivity
而不是Activity
延伸。然后覆盖onListItemClick
。这应该有用。
答案 2 :(得分:2)
您应该将自定义列表布局中的所有可聚焦项目设置为false:
android:focusable="false"
我认为你不应该使用像android:clickable =“true”这样的属性。
答案 3 :(得分:1)
使用
setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
// here you code
}
})
而不是setOnItemSelectedListener
当选择项目未被点击时调用setOnItemSelectedListener以获得被点击的项目你必须使用setOnItemClickListener这将工作
答案 4 :(得分:0)
缺少所选择的侦听器被调用的项目是基于设备所处的模式。在touch mode中,没有焦点也没有选择。您的UI应该使用小部件来区分触摸选择和触摸滚动。例如,当有一个选择选项时,单选按钮就很好。