【问题标题】:How to add onclick event into listview using a Fragment如何使用片段将 onclick 事件添加到列表视图中
【发布时间】:2015-02-04 00:43:27
【问题描述】:

尝试将setOnItemClickListener 添加到片段时遇到问题。

这是我的片段。

public class LocalesFragmento extends Fragment {

ListView locales_list;
private List localesList;

private Context context;

public LocalesFragmento() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View vista = inflater.inflate(R.layout.locales_list, container, false);
    locales_list = (ListView) vista.findViewById(R.id.localesList);

    new getLocalesAsyncTask().execute();
    return vista;
}

private void setListAdapter() {
    Log.e("Adapter","Adapter...");
    locales_list.setAdapter(new LocalesAdapter(getActivity(), getActivity(), localesList));

    locales_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            //detailInstagram(list.get(position));
        }
    });
}

永远不会执行 setOnItemClickListener。有任何想法吗? 我需要实现其他方法吗?

谢谢。 最好的问候。

【问题讨论】:

  • 看起来你没有调用setListAdapter 方法。如果是,您从哪里调用该方法?
  • 是的,我调用了这个方法...在执行AsyncTask 之前从WebService 获取数据。
  • 您的列表项布局是什么样的?如果任何视图是可点击或可聚焦的(例如,它包含一个按钮),则永远不会调用监听器。
  • LocalesAdapter 的构造函数对我来说似乎很奇怪。我通常在实例化调用中使用分配给 Context 类型变量 mCtx 的 getApplicationContext()。你有两次 getActivity() 。为什么你需要两次上下文?
  • 发布您的列表视图项目布局。如果您使用任何具有焦点的视图(如按钮、图像按钮),则 setOnItemClickListener 将不会调用。

标签: android android-fragments android-listview onclicklistener


【解决方案1】:

您在 onActivityCreated 方法上启动 AsyncTask,因为在附加布局之前,您正在启动异步,这可能是设置侦听器的原因。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
       super.onActivityCreated(savedInstanceState);

       locales_list.setAdapter(new LocalesAdapter(getActivity(), getActivity(), localesList));
       locales_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
              //detailInstagram(list.get(position));

            }
        });
        new getLocalesAsyncTask().execute();
}

【讨论】:

  • 如果你正在加载自定义布局到列表视图,然后添加 android:focusable="false" 到它的孩子
【解决方案2】:

您的 LocalesAdapter 可能是原因。您将上下文 (getActivity()) 传递给适配器两次。

locales_list.setAdapter(new LocalesAdapter(getActivity(), getActivity(), localesList));

确保传递给 LocalesAdapter 的参数正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多