在我的活动中,我创建了7个列表视图,我使用viewpager在同一活动中滑动它们。然后,我有一个sqlite数据库填充每个listview。我的问题是onitemclicklistener不工作,没有错误,代码执行得很好,但列表项单击没有发生任何事情。我通过添加吐司显示消息等进行了测试,但在列表项单击时没有发生任何事情。
我怀疑问题是我没有像传统方法一样从xml布局中获得列表视图,所以itemclicklistener方法略有不同,但是我不知道使用这种方式使用列表视图时使用什么方法,也没有其他操作系统线程我见过以这种方式创建列表视图。如果有人能告诉我一些情况,我将非常感激。提前感谢。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.activity_schedule);
ListView listview1 = new ListView(mContext);
ListView listview2 = new ListView(mContext);
ListView listview3 = new ListView(mContext);
ListView listview4 = new ListView(mContext);
ListView listview5 = new ListView(mContext);
ListView listview6 = new ListView(mContext);
ListView listview7 = new ListView(mContext);
Vector<View> pages = new Vector<View>();
pages.add(listview1);
pages.add(listview2);
pages.add(listview3);
pages.add(listview4);
pages.add(listview5);
pages.add(listview6);
pages.add(listview7);
ViewPager vp = (ViewPager) findViewById(R.id.viewpager);
PageAdapter adapter = new PageAdapter(mContext,pages);
vp.setAdapter(adapter);
db.open();
scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getMonday(),CursorAdapter.NO_SELECTION );
listview1.setAdapter(scheduleAdapter);
db.close();
db.open();
scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getTuesday(),CursorAdapter.NO_SELECTION );
listview2.setAdapter(scheduleAdapter);
db.close();
db.open();
scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getWednesday(),CursorAdapter.NO_SELECTION );
listview3.setAdapter(scheduleAdapter);
db.close();
db.open();
scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getThursday(),CursorAdapter.NO_SELECTION );
listview4.setAdapter(scheduleAdapter);
db.close();
db.open();
scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getFriday(),CursorAdapter.NO_SELECTION );
listview5.setAdapter(scheduleAdapter);
db.close();
db.open();
scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getSaturday(),CursorAdapter.NO_SELECTION );
listview6.setAdapter(scheduleAdapter);
db.close();
db.open();
scheduleAdapter = new ScheduleAdapter(ScheduleActivity.this, db.getSunday(),CursorAdapter.NO_SELECTION );
listview7.setAdapter(scheduleAdapter);
db.close();
listview1.setOnItemClickListener(new ListView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});
从您的描述中我了解到当您启动应用程序时列表会显示。
位置参数,保存用户在(屏幕)列表中单击的位置。
你试过和开关柜一起用吗?
我的意思是:
list.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick( AdapterView <?> parent, View view, int
position,long id){
switch(position){
case 0:
// write what you need here when the user clicks on the first list item
break;
case 1:
// write what you need here when the user clicks on the 2nd list item
break;
}
}
};
希望这对你有帮助
我不太确定为什么itemClicklistener不被调用,当你按下listview1的东西,但我不认为这是最大的问题。
你在一个活动中添加了7个列表视图,并且打开和关闭数据库7次,这是一个糟糕的开始。
我建议你从Android UI模式开始:https://play.google.com/store/apps/details?id=com.groidify.uipatterns
在那里你会发现一个满是viewpagers和tab示例的页面。我建议你选杰克·沃顿的。
在你的ListFragment你应该扩展ListFragment然后使用onlisttitemclick,像这样:
public class ArrayListFragment extends ListFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, Listnames.TITLES));
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Log.i("FragmentList2", "Item clicked: " + id);
String item = (String) getListAdapter().getItem(position);
Intent intent = new Intent(getActivity(), SearchableActivity.class);
intent.putExtra("item", item);
Toast.makeText(getActivity(), item, Toast.LENGTH_LONG).show();
// startActivity(intent);
}
}