如何使用Listview和pull刷新并滑动以删除

时间:2016-04-06 13:00:54

标签: android listview swiperefreshlayout

我使用this库在我的bu中使用滑动删除。并且还使用滑动刷新并为此我使用 android.support.v4.widget.SwipeRefreshLayout 所以设计很好,当我向下滑动刷新时看起来都很好。我的列表会刷新并更新内容。

以下是我的布局

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"

>
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true">
<com.baoyz.swipemenulistview.SwipeMenuListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:dividerHeight="5.0sp"
    android:divider="@android:color/transparent"/>

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center">
    <TextView
        android:id="@+id/swipeRefreshLayout_emptyView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:visibility="gone"
        android:gravity="center"
        /></ScrollView>
</FrameLayout>

        

问题:

由于我想通过使用滑动来删除项目,为此我必须从右向左滑动以打开删除菜单并且它会打开但是当我触摸它时没有任何反应。

我现在正在研究结果,我认为两次手势互相拦截。我做了调试,没有删除项目的菜单没有收听点击。

请帮助我卡在中间。你有什么建议可以帮我吗?

更新1

我调试代码,当我点击菜单中的“删除”按钮时,它会显示在日志中的跟踪

  

D / ViewRootImpl:ViewPostImeInputStage ACTION_DOWN

我认为删除项目无视我的触摸

3 个答案:

答案 0 :(得分:1)

answer中的最佳方法是在启动扫描菜单时禁用sweipRefreshLayout,并在完成时再次启用它 作为此代码

list.setOnSwipeListener(new SwipeMenuListView.OnSwipeListener() {
        @Override
        public void onSwipeStart(int position) {
            mySwipeRefresh.setEnabled(false);
        }

        @Override
        public void onSwipeEnd(int position) {
            mySwipeRefresh.setEnabled(true);
        }
    });

我希望它对我有用。

答案 1 :(得分:0)

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/swipe_refresh"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center">


    </ScrollView>

</android.support.v4.widget.SwipeRefreshLayout>

java方

private static final String LOG_TAG = "MySwipeListener";
private SwipeRefreshLayout swipeRefresh;

swipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);

swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener()
        {
            @Override
            public void onRefresh()
            {
                Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout");
                yourAdapter.swipeRefresh();
                swipeRefresh.setRefreshing(false);
            }
        });

答案 2 :(得分:0)

试试吧!

listView.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
    switch (index) {
    case 0:

        break;
    case 1:
        // delete
  youListData.remove(position);
  adapter.notifydatasetchanged()
        break;
    }
    // false : close the menu; true : not close the menu
    return false;
}
});