使用emptyView和ListView时SwipeRefreshLayout问题

时间:2016-02-15 05:33:24

标签: android listview swiperefreshlayout

我正在使用围绕ListView的SwipeRefreshLayout。当ListView为空时,我已设置TextView以显示。这“工作正常”,但当ListView为空并且显示空视图时,SwipeRefreshLayout无法正确显示。如果向下拖动,没有圆圈下降但是当你松开手指时,圆圈在屏幕上闪烁然后消失。事实上,如果您只是在任何地方触摸屏幕,SwipeRefreshLayout将以相同的方式出现。以下是我在XML中定义的方法:

&test_cell

编辑:活动代码

<FrameLayout
    android:id="@+id/empty_view_requests"
    android:layout_width="match_parent"
    android:layout_centerInParent="true"
    android:layout_below="@+id/appbar"
    android:layout_height="match_parent">

    <android.support.v4.widget.SwipeRefreshLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/appbar"
        android:id="@+id/buddy_requests_swipe_layout">
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/buddy_requests_listview"
            android:layout_gravity="center_horizontal|top"
            />
    </android.support.v4.widget.SwipeRefreshLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:layout_gravity="center_horizontal|center_vertical"
        android:id="@+id/norequests_textview"
        android:text="No buddy requests."/>
</FrameLayout>

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

我正在粘贴我的工作代码。即使我遇到了问题。希望这对你有用。  最初设置emptyview可见性View.GONE。然后在API调用响应callBacks上设置,如果没有items / statuscode..etc,setvisibility View.VISIBLE并将其设置为emptyviewfor listview。

findViewById(R.id.lvemptyview).setVisibility(View.GONE);



    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
             if (Utils.isInternetConnected(getApplicationContext())) {
                        CallAPICall(lat, lng);
                        mSwipeRefreshLayout.setRefreshing(false);
                    } }});

关于齐射响应回调

 mSwipeRefreshLayout.setRefreshing(false);

            if (statuscode== 200) {
                try {

                    String content = new String(arg2, "UTF-8");
                    MemberResp memberResp;
                    Gson gson = new Gson();
                    Type type = new TypeToken<MemberResp>() {
                    }.getType();
                        memberResp = gson.fromJson(content, type);
                        if (memberResp.Status == 1) {

                            if (memberResp.bar_lists.size() > 0) {
                                      findViewById(R.id.lvemptyview).setVisibility(View.GONE);
                          setadapter();
                  } else {

               Adapter.ClearAll();
                          findViewById(R.id.lvemptyview).setVisibility(View.VISIBLE);
                             lvList.setEmptyView(findViewById(R.id.lvemptyview));


                            }

答案 1 :(得分:1)

尝试将TextView放入ScrollView。我发现SwipeRefreshLayout需要某种可滚动的视图

您的代码将是

<FrameLayout
android:id="@+id/empty_view_requests"
android:layout_width="match_parent"
android:layout_centerInParent="true"
android:layout_below="@+id/appbar"
android:layout_height="match_parent">

<android.support.v4.widget.SwipeRefreshLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/appbar"
    android:id="@+id/buddy_requests_swipe_layout">
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/buddy_requests_listview"
        android:layout_gravity="center_horizontal|top"
        />
</android.support.v4.widget.SwipeRefreshLayout>
<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:layout_gravity="center_horizontal|center_vertical"
        android:id="@+id/norequests_textview"
        android:text="No buddy requests."/>
</ScrollView>
</FrameLayout>

应该马上工作

答案 2 :(得分:0)

您已将父框架布局设置为子视图的空视图(listview)。尝试删除该行。

答案 3 :(得分:0)

空布局是文本视图。请参考以下代码。并在SetEmptyListView之后设置适配器。

TextView noRequestsLayout = (TextView)findViewById(R.id.norequests_textview);
    ListView requestsListView = (ListView)findViewById(R.id.buddy_requests_listview);
    requestListAdapter = new BuddyRequestsActivityListAdapter(this, this);
    requestsListView.setEmptyView(noRequestsLayout);
     requestsListView.setAdapter(requestListAdapter);