我试图在ListItems上使用onItemClick来处理片段。这是我的代码:
public class MyBudgetPageMenuFragment extends Fragment {
private Context context;
private ListView listView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myFragmentView = inflater.inflate(R.layout.my_budget_listview,
container, false);
ListView listView = (ListView) myFragmentView
.findViewById(android.R.id.list);
context = this.getActivity().getApplicationContext();
String[] values = new String[4];
ListAdapter adapter = new ListAdapter(context, values);
listView.setAdapter(adapter);
listView.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
selectItem(position);
}
});
return myFragmentView;
}
private void selectItem(int position) {
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment;
switch (position) {
case 0:
fragment = new MyBudgetPageFragments();
fragmentManager.beginTransaction()
.replace(R.id.listFragment, fragment).commit();
break;
default:
String message1 = Integer.toString(position);
AlertDialog alertDialog = new AlertDialog.Builder(context).create();
alertDialog.setMessage("Position: " + message1);
alertDialog.show();
break;
}
}
}
但每次当我选择一个项目时,它都没有做任何事情或抛出任何异常。事件似乎没有登记。我对代码进行了调试,但它没有进入我的活动。 someoane可以告诉我我做错了吗?
答案 0 :(得分:1)
请注意,ListView会阻止包含至少一个焦点的项目的点击次数 后代,但它不会使内容焦点可达调用 setItemsCanFocus(真)。一种解决方法是使用
禁用后代的可聚焦性android:descendantFocusability="blocksDescendants"
在定义列表项的布局中。 (首先从http://cyrilmottier.com/2011/11/23/listview-tips-tricks-4-add-several-clickable-areas/了解到这一点)你的布局是否包含按钮?如果是这样,你就属于这种情况。
答案 1 :(得分:0)
走一条简单的路。
在适配器类中,在getView
方法之间,初始化View v = convertView;
然后
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "test "+ list.get(position).getS_name(), Toast.LENGTH_SHORT).show();
}
});