Android-swipRefreshLayout(드롭다운 새로 고침)

5924 단어 Android
swipRefreshLayout(드롭다운 새로 고침)
swipRefreshLayou는 v4 패키지 아래의 드롭다운 리셋 컨트롤입니다
1.set On Refresh Listener(On Refresh Listener listener) 설정 하단 감청, 사용자가 하단할 때 리셋을 실행합니다
2.setColorSchemeColor(int...colors) 진행률 막대의 색상 변경을 설정합니다. 최대 4가지 색상을 설정할 수 있습니다.
3.setProgressViewOffset(boolean scale, int start, int end) 호출 진행률 게이지 거리 화면 상단의 거리
4.setRefreshing(boolean refreshing) 설정SwipeRefresh Layout이 현재 리셋 상태인지 여부입니다. 일반적으로 데이터를 요청할 때true를 설정하고 데이터가 View에 불러온 후false로 설정합니다.
swipRefreshLayou는 직접 서브뷰를 하나만 포함할 수 있음을 주의하십시오
SwipeRefreshLayout 주요 방법 소개 sRefreshing()
현재 상태가 갱신 상태인지 판단
setColorSchemeResources(int… colorResIds)
아래 진도표의 색 테마를 설정합니다. 파라미터는 가변 파라미터이고 자원 id입니다. 여러 가지 다른 색을 설정할 수 있습니다. 한 바퀴 돌 때마다 한 가지 색을 표시합니다.
setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener)
감청을 설정하려면 onRefresh () 방법을 다시 써야 하며, 맨 윗부분 밑에 있을 때 이 방법을 사용합니다. 그 안에서 요청 데이터의 논리를 실현하고, 밑에 있는 진도표를 설정하면 사라집니다.
setProgressBackgroundColorSchemeResource(int colorRes)
드롭다운 진행률 막대의 배경색을 설정합니다. 기본값은 흰색입니다.
setRefreshing(boolean refreshing)
새로 고침 상태를 설정합니다.true는 새로 고침 중을,false는 새로 고침을 취소합니다.
SwipeRefreshLayout의 기본 사용
1. 배치 설정
  

–>
2. 코드에서 사용
//색 속성을 설정할 때 자원 파일을 인용했는지 16진수를 직접 설정했는지 주의해야 한다. int값이 헷갈리기 쉽기 때문이다//밑에 있는 진도를 설정하는 배경색이고 기본값은 흰색의 swipeRefreshView이다.setProgressBackgroundColorSchemeResource(android.R.color.white);//드롭다운 진행률의 주제 색상 swipeRefreshView를 설정합니다.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark);
//드롭다운 시 Swipe Refresh Layout의 드롭다운 애니메이션을 터치하고 애니메이션이 끝난 후에 이 방법을 리셋합니다. swipe Refresh View.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() {
      //     ,         
      //swipeRefreshLayout.setRefreshing(true);

      //       
      //          ,        ,          
      // TODO     
      final Random random = new Random();
      new Handler().postDelayed(new Runnable() {
          @Override
          public void run() {
              mList.add(0, "    " + random.nextInt(100) + " ");
              mAdapter.notifyDataSetChanged();

              Toast.makeText(MainActivity.this, "       ", Toast.LENGTH_SHORT).show();

              //              ,        
              swipeRefreshView.setRefreshing(false);
          }
      }, 1200);

      // System.out.println(Thread.currentThread().getName());

      //         ,        
      //swipeRefreshLayout.setRefreshing(false);
  }

});
사용자 정의 View 상속 Swipe Refresh Layout, 업로드 기능 추가
1. 하위 컨트롤 가져오기 ListView
레이아웃 사용 중, 여기는 Swipe Refresh Layout과 마찬가지로, ListView는 Swipe Refresh View의 하위 컨트롤러이기 때문에, onLayout () 방법에서 하위 컨트롤러를 가져와야 합니다. ListView.
//ListView 가져오기, ListView 배치 위치 설정
if (mListView == null) {
//용기에 아이가 얼마나 있는지 판단
if (getChildCount() > 0) {
//첫아이가 ListView인지 아닌지 판단
if (getChildAt(0) instanceof ListView) {
//ListView 객체 작성
mListView = (ListView) getChildAt(0);
//ListView의 슬라이딩 감청 설정 setListViewOnscroll ();}}
2. ListView 슬라이딩 감지 설정
ListView의 슬라이딩 이벤트를 감청합니다. 끝까지 슬라이딩하고 현재 보이는 페이지의 마지막 항목이 adapter의 getCount 수량-1과 같으면 데이터를 불러오는 조건을 충족시킵니다./**
  • ListView의 슬라이딩 감지 설정*/private void setListView Onscroll() {
  • mListView.setOn Scroll Listener(new AbsList View.on Scroll Listener() {@Override public void on Scroll StateChanged(AbsListView view, int scroll State) {//이동 중 판단할 때 더 많은if(canLoadMore() {//데이터 로드 loadData()}
          @Override
          public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    
          }
      });
    

    }
    3. SwipeRefreshView 컨테이너의 배포 이벤트 처리
    ListView는 Swipe RefreshView의 하위 컨트롤러이기 때문에 이벤트의 배달 처리를 통해 사용자의 미끄럼 거리가 조건에 부합되는지 판단합니다.
    /**
  • 이벤트를 나누어 줄 때 하위 컨트롤의 터치 이벤트를 처리

  • @param ev
  • @return

  • */
    private float mDownY, mUpY;
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    switch(ev.getaction() {case Motion Event.ACTION DOWN://이동의 시작점 mDownY = ev.getY();break;case Motion Event.ACTION MOVE://이동 중 판단할 때 더 많은if(canLoadMore() {//데이터 로드 loadData()}
              break;
          case MotionEvent.ACTION_UP:
              //      
              mUpY = getY();
              break;
      }
      return super.dispatchTouchEvent(ev);
    

    }
    4. 판단 조건이 충족되면 리셋으로 데이터를 불러옵니다
    판단해야 할 모든 조건을 충족시키면 데이터를 불러오는 방법을 호출할 수 있습니다. 여기에 레이아웃 디스플레이와 숨기는 방법을 설정합니다. 현재 상태로 전송되면true가 불러오는 것을 표시하고false가 있으면 숨깁니다.
    /**
  • 추가 로드 조건 충족 여부 판단

  • @return

  • */
    private boolean canLoadMore() {
    //1. 위로 당김 상태입니다.
    boolean condition1 = (mDownY - mUpY) >= mScaledTouchSlop; if (condition1) {
    System.out.println ("위로 당기기 상태");
    }
    //2. 현재 페이지에서 볼 수 있는 item은 마지막 항목boolean condition2 =false입니다.if (mListView != null && mListView.getAdapter() != null) { condition2 = mListView.getLastVisiblePosition() == (mListView.getAdapter().getCount() - 1); }
      if (condition2) {
          System.out.println("       ");
      }
      // 3.       
      boolean condition3 = !isLoading;
      if (condition3) {
          System.out.println("        ");
      }
      return condition1 && condition2 && condition3;
    

    }
    /**
  • 데이터를 로드하는 논리 */private void loadData() {System.out.println(데이터 로드...),if(mOnLoadListener!=null) {//로드 상태를 설정하여 레이아웃에 setLoading(true), mOnLoadListener.onLoad()를 표시합니다.

  • }
    /**
  • 불러오는 상태를 설정하고 boolean 값을 불러오는지 판단

  • @param loading */public void setLoading(boolean loading) {//현재 상태 수정 isLoading = loading; if (isLoading) {//레이아웃 mListView.addFooterView(mFooterView) 표시;else {//레이아웃 숨기기 mListView.removeFooterView(mFooterView),
     //        
     mDownY = 0;
     mUpY = 0;
    
    }}
  • 좋은 웹페이지 즐겨찾기