0

我正在尝试让 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;
    }
 }
}

但是每次我选择一个项目时,它都没有做任何事情或抛出任何异常。该事件似乎没有被注册。我调试了代码,它没有进入我的事件。有人可以告诉我我做错了什么吗?

4

2 回答 2

1

请注意,ListView 会阻止对包含至少一个可聚焦后代的项目的点击,但它不会使内容焦点可到达调用 setItemsCanFocus(true)。一种解决方法是禁用后代的可聚焦性,使用

android:descendantFocusability="blocksDescendants"

在定义列表项的布局中。(我首先从http://cyrilmottier.com/2011/11/23/listview-tips-tricks-4-add-several-clickable-areas/了解到这一点)您的布局是否包含按钮?如果是这样,你就会陷入这种情况。

于 2014-04-15T14:33:24.607 回答
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();
    }
});
于 2016-05-10T11:25:13.200 回答