2014-09-09 2 views
0

ListView를 SwipeRefreshLayout에 추가했습니다. 그러나 onRefresh 메서드가 작동하지 않습니다. listview는 데이터와 함께 제공되며 listview를 스크롤하면 onRefresh가 작동하지 않습니다. 첫 번째 항목을 볼 때 swipeContainer를 활성화하는 메서드를 사용하고 있습니다. 내 코드를 검사하고 내가 뭘 잘못하고 있는지 말해 줄 수 있겠 니?SwipeRefreshLayout onRefresh 메서드가 작동하지 않습니다.

여기 내 활동입니다 :

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(); 

    } 

답변

0

내가 오해하지 않은 경우, 당신은 SwipeRefreshLayout을 sublcass 및 canChildScrollUp를 구현해야합니다.

public class MySwipeRefreshLayout extends SwipeRefreshLayout { 

     private ListView mListView; 

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


} 
+0

하면, 코드 조각을하시기 바랍니다 제공 할 수있다 (오타 확인) : ListView가의 경우

firstVisibileItem != 0 

편집을 반환하기에 충분해야 하는가? 이 방법을 구현하는 방법을 잘 모르겠습니다. –

+0

나는 그것을했다. 보세요 – Blackbelt

관련 문제