0

SwipeRefreshLayout に ListView を追加しました。ただし、onRefresh メソッドは機能しません。リストビューにはデータが付属しており、リストビューをスクロールするとonRefreshが機能しなくなると思います。最初のアイテムが表示されているときに swipeContainer を有効にするメソッドを使用しています。私のコードを調べて、何が間違っているのか教えてください。

ここに私の活動があります:

public class TimelineActivity extends  Activity {
    private SwipeRefreshLayout swipeContainer;
    JSONObject jsonobject;
    JSONObject jsonobj;
    CityList list;
    ArrayList<CityInfo> myList;
    SharedPreferences sp;
    JSONArray jArray = null;
    JSONArray jResult = null;
    Object info;
    String resultmsg = null;
    String json;
    ListView theListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        swipeContainer = (SwipeRefreshLayout) findViewById(R.id.swipeContainer);
        // Setup refresh listener which triggers new data loading
        swipeContainer.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh() {
                // Your code to refresh the list here.
                // Make sure you call swipeContainer.setRefreshing(false) when
                // once the network request has completed successfully.
                Log.i("refresh","refreshing");
                new DownloadJSON().execute();
            } 
        });

        ViewGroup vg = (ViewGroup) findViewById(R.id.mainlayoutarea);
        ViewGroup.inflate(TimelineActivity.this, R.layout.city_list, vg);
        setContentView(R.layout.city_list);
        theListView = (ListView) findViewById(R.id.cityList);

        theListView.setOnScrollListener(new OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                boolean enable = false;
                if(theListView != null && theListView.getChildCount() > 0){
                    // check if the first item of the list is visible
                    boolean firstItemVisible = theListView.getFirstVisiblePosition() == 0;
                    // check if the top of the first item is visible
                    boolean topOfFirstItemVisible = theListView.getChildAt(0).getTop() == 0;
                    // enabling or disabling the refresh layout
                    enable = firstItemVisible && topOfFirstItemVisible;
                }
                swipeContainer.setEnabled(enable);
            }
        });

        swipeContainer.setColorSchemeResources(android.R.color.holo_blue_light, 
                android.R.color.holo_green_light, 
                android.R.color.holo_orange_light, 
                android.R.color.holo_red_light);

        new DownloadJSON().execute();

    }
4

1 に答える 1

0

誤解していなければ、 canChildScrollUp をサブクラスSwipeRefreshLayoutして実装する必要があります。ListView の場合、返すのに十分なはずです

firstVisibileItem != 0

編集:(タイプミスをチェックしてください)

public class MySwipeRefreshLayout extends SwipeRefreshLayout {

      private ListView mListView;

      public  boolean canChildScrollUp () {
           if (mListView == null) {
                mListView = (ListView) findViewById(R.id.idlistview);
           }
          return mListView.getFirstVisiblePosition() != 0;
      }


}
于 2014-09-09T12:47:33.813 に答える