2

バックグラウンド

ListView がSwipeRefreshLayout内にある場合に、ListView 内にヘッダー ビューを追加するときに問題が発生しました (link here ) 。

問題

問題は、ヘッダー ビューが部分的に表示されている場合に上にスクロールすると、SwipeRefreshLayout の円形ビューが表示されることです。

上記のリンクをチェックして、私が話していることのビデオを見ることができます。

サンプルコード

この問題を再現する方法は次のとおりです (コピーして貼り付けたくない場合は、上記のリンクを確認してください)。

MainActivity.java

public class MainActivity extends ActionBarActivity
  {
  @Override
  protected void onCreate(final Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ListView listView=(ListView)findViewById(android.R.id.list);
    final TextView tv=new TextView(this);
    tv.setText("a very large header view");
    tv.setTextSize(70);
    listView.addHeaderView(tv);
    final SwipeRefreshLayout swipeRefreshLayout=(SwipeRefreshLayout)findViewById(R.id.swipeToRefreshLayout);
    swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener()
      {
        @Override
        public void onRefresh()
          {
          new Handler().postDelayed(new Runnable()
            {
              @Override
              public void run()
                {
                swipeRefreshLayout.setRefreshing(false);
                }
            },1000);
          }
      });
    final ArrayList<String> arrayList=new ArrayList<String>();
    for(int i=0;i<1000;++i)
      arrayList.add(Integer.toString(i));
    listView.setAdapter(new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,arrayList));
    }
  }

res/layout/activity_main.xml

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

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:cacheColorHint="@android:color/transparent"
        android:fastScrollEnabled="true"
        android:footerDividersEnabled="true"
        android:headerDividersEnabled="true"
        android:paddingEnd="4dp"
        android:paddingLeft="4dp"
        android:paddingRight="4dp"
        android:paddingStart="4dp"
        android:scrollingCache="false"
        android:smoothScrollbar="false"
        android:textFilterEnabled="true"/>

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

質問

この問題を解決する方法はありますか?

listView にマルチタイプを使用できると思いますが、よりエレガントでシンプルな、または他の方法でより優れた別のソリューションはありますか?

4

2 に答える 2

1

EDIT:ListViewにマルチタイプのアイテムを使用しても発生するようです。後で、listView の最初の項目で常に発生することがわかりました。

最初の項目が十分に大きければ、再現は簡単です。

したがって、今のところ、簡単な回避策があります。

リストビューを何らかの方法で使用する前に、まず空のビューをヘッダー ビューとして追加し、決して削除しないでください。

listView.addHeaderView(new View(this));

この方法では、ビューは実質的に見えないため、バグはユーザーに表示されません。

これは単なる回避策ですが、この問題を修正するのが最善だと思います。

于 2014-11-20T23:55:07.000 に答える