【问题标题】:onItemClick doesnt work in a listview in a fragmentonItemClick 在片段的列表视图中不起作用
【发布时间】:2014-12-29 18:45:32
【问题描述】:

所以,我正在处理片段中的列表视图... “onItemClick”不起作用,但 onItemLongClick 和刷新效果很好.. (使用 SherlockLibary...) 这是我的代码:

     public static class  MyListActivity extends SherlockListFragment
        implements AdapterView.OnItemClickListener,    AdapterView.OnItemLongClickListener,OnRefreshListener {

    ArrayList<article> items2;
    private String[] articles = {"x","y","z"};    //articles titles

    private String[] Dates = {"20:12"
            , "18:20"
            , "15:15"
            , "14:11"
            , "10:00"
    };    //articles dates
    private Site[] Sites = {
            Site.Ynet
            , Site.bla
            , Site.blabla
            , Site.blablabla
            , Site.blablabla
    };    //articles Gender


    private void initData() {
        items2 = new ArrayList<article>();
        for (int i = 0; i < 5; i++) {
            items2.add(new article(articles[i], Dates[i], Sites[i]));
        }
    }

    private PullToRefreshLayout mPullToRefreshLayout;
    ListView list;
    MyArrayAdapter adapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_main, container, false);
        mPullToRefreshLayout = (PullToRefreshLayout) view.findViewById(R.id.listlay);
        ActionBarPullToRefresh.from(getActivity())
                .allChildrenArePullable()
                .listener(this)
                .setup(mPullToRefreshLayout);

        initData();
        list = (ListView)view.findViewById(android.R.id.list);
        adapter = new MyArrayAdapter(getActivity(), items2);
        list.setAdapter(adapter);
        list.setOnItemClickListener(this);
        list.setOnItemLongClickListener(this);
        return view;
    }



    // Handle click on an item (displays it in a Toast)
    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        items2.remove(position);
        Toast.makeText(getActivity(), "select: " + items2.get(position).toString(), Toast.LENGTH_LONG).show();
    }

    // Handle a long click on an item (deletes it)
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View v,
                                   int position, long id) {
        Toast.makeText(getActivity(),
                "del: " + items2.get(position).toString(),
                Toast.LENGTH_LONG).show();
        items2.remove(position);
        adapter.notifyDataSetChanged(); // Update the ListView

        return true;  // i.e. all ended well
    }

    @Override
    public void onRefreshStarted(View view) {

        /**
           nathing here yet...
         * Simulate Refresh with 4 seconds sleep
         */

        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                try {
                    Thread.sleep(Constants.SIMULATED_REFRESH_LENGTH);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);

                // Notify PullToRefreshLayout that the refresh has finished
                mPullToRefreshLayout.setRefreshComplete();
            }
        }.execute();

    }
}

知道我能用它做什么吗? 我尝试了很多,但 nathing 工作....请帮助....

我尝试添加 list.setItemsCanFocus(false);或 android:focusable="false" 或一个 android:clickable="false" ... 没用...

【问题讨论】:

    标签: android listview android-fragments onitemclicklistener onitemclick


    【解决方案1】:

    如果ListView 的项目是可聚焦的,onItemClick() 方法将不起作用。检查您的项目 xml 以查看您是否为其任何元素设置了这些。

    android:focusable="true"
    

    android:clickable="true" 
    

    另一种解决方案:使用这条线

    list.setItemsCanFocus(false);
    

    之后

    list = (ListView)view.findViewById(android.R.id.list);
    

    【讨论】:

    • 我没有设置它们,我的 xml: schemas.android.com/apk/res/android" android:id="@+id/listlay" android:layout_width="match_parent" android:layout_height="match_parent">
    • 即使我设置了 android:focusable="false" 和 android:clickable="false" 也不起作用..
    • 不在列表视图中。检查您在列表视图中添加的项目的 xml。
    • 我的 XML 中没有人有任何可点击或可聚焦的...还有其他想法吗?在我把它变成一个片段之前,那是有效的,当这是一个正常的活动时,那是有效的..(对不起语法不好)
    • 您的列表视图项 xml 不应包含 android:focusable="true"android:clickable="true"。列表视图也不应该有android:clickable="false"android:focusable="false"。你能验证一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多