Android 사용자 정의 일반적인 loadingview 구현 코드

8446 단어 androidloadingview
기능.
1.로 딩 보 기 를 표시 합 니 다.로 딩 에 실 패 했 을 때 로 딩 실패 보 기 를 표시 합 니 다.데이터 가 비어 있 을 때 데 이 터 를 빈 보기 로 표시 합 니 다.실패 보기 설정 클릭 이벤트 로 데 이 터 를 다시 불 러 오 는 것 을 지원 합 니 다.
2.맞 춤 형 설정 을 지원 하고 로 딩,실패,빈 데이터 보 기 를 사용자 정의 설정 합 니 다.
먼저 효과 도 를 한 장 놓 고 놀 라 게 하 다.

이루어지다
아 이 디 어 를 실현 하 는 것 은 바로 FrameLayout 에 세 개의 레이아웃 을 추가 하여 숨 기 는 것 입 니 다.사용자 정의 보 기 는 안에 있 는 view 를 교체 하 는 것 입 니 다.코드 가 비교적 간단 합 니 다.제 사용자 정의 view 시 리 즈 를 직접 보 거나 사용자 정의 view 에 대해 알 고 있 으 면 쉽게 알 수 있 고 모든 코드 를 직접 올 립 니 다.
구체 코드
자바 코드

public class CommonLoadingView extends FrameLayout {


  //       
  protected TextView mLoadingTextTv;
  public Context mContext;
  //      
  protected LinearLayout mLoadErrorLl;
  //          
  private LoadingHandler mLoadingHandler;
  //  view
  private View loadingView;
  //    view
  private View loadingErrorView;
  //    
  private View emptyView;


  public CommonLoadingView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }

  public CommonLoadingView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    mContext = context;
  }

  public void setLoadingHandler(LoadingHandler loadingHandler) {
    mLoadingHandler = loadingHandler;
  }

  public void setLoadingErrorView(View loadingErrorView) {
    this.removeViewAt(1);
    this.loadingErrorView = loadingErrorView;
    this.loadingErrorView.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        if (mLoadingHandler != null) {
          mLoadingHandler.doRequestData();
          CommonLoadingView.this.load();
        }
      }
    });
    this.addView(loadingErrorView,1);
  }

  public void setLoadingView(View loadingView) {
    this.removeViewAt(0);
    this.loadingView = loadingView;
    this.addView(loadingView,0);
  }

  @Override
  protected void onFinishInflate() {
    super.onFinishInflate();
    loadingView = inflate(mContext, R.layout.common_loading_view, null);
    loadingErrorView = inflate(mContext, R.layout.network_layout, null);
    emptyView = inflate(mContext, R.layout.empty_layout, null);
    this.addView(loadingView);
    this.addView(loadingErrorView);
    this.addView(emptyView);
    loadingErrorView.setVisibility(GONE);
    emptyView.setVisibility(GONE);
    initView(this);
  }


  public void setMessage(String message) {
    mLoadingTextTv.setText(message);
  }


  private void initView(View rootView) {
    mLoadingTextTv = (TextView) rootView.findViewById(R.id.loading_text_tv);
    mLoadErrorLl = (LinearLayout) rootView.findViewById(R.id.load_error_ll);
    mLoadErrorLl.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        if (mLoadingHandler != null) {
          CommonLoadingView.this.load();
          mLoadingHandler.doRequestData();
        }
      }
    });
  }

  public void load(){
    loadingView.setVisibility(VISIBLE);
    loadingErrorView.setVisibility(GONE);
    emptyView.setVisibility(GONE);
  }

  public void load(String message){
    mLoadingTextTv.setText(message);
    loadingView.setVisibility(VISIBLE);
    loadingErrorView.setVisibility(GONE);
    emptyView.setVisibility(GONE);
  }


  public void loadSuccess(){
    this.loadSuccess(false);
  }

  public void loadSuccess(boolean isEmpty){
    loadingView.setVisibility(GONE);
    loadingErrorView.setVisibility(GONE);
    if (isEmpty) {
      emptyView.setVisibility(VISIBLE);
    }else{
      emptyView.setVisibility(GONE);
    }
  }


  public void loadError(){
    loadingView.setVisibility(GONE);
    loadingErrorView.setVisibility(VISIBLE);
  }


  public interface LoadingHandler{
    void doRequestData();
  }
}

쓰다
기본 사용
몇 가지 기본 적 인 load loadError loadSucccess 방법 을 사용 합 니 다.

public class DefaultViewActivity extends AppCompatActivity {

  protected ListView mListView;
  protected CommonLoadingView mLoadingView;
  private List<String> mList = new ArrayList<>();
  ArrayAdapter adapter;


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

  private void initView() {
    mListView = (ListView) findViewById(R.id.listView);
    mLoadingView = (CommonLoadingView) findViewById(R.id.loadingView);
    mLoadingView.load();

    //              
    mLoadingView.setLoadingHandler(new CommonLoadingView.LoadingHandler() {
      @Override
      public void doRequestData() {
        mLoadingView.postDelayed(new Runnable() {
          @Override
          public void run() {
            for (int i = 1; i <=20 ; i++) {
              mList.add(i+"");
            }
            adapter = new ArrayAdapter(DefaultViewActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, mList);
            mListView.setAdapter(adapter);
            mLoadingView.loadSuccess(false);
          }
        },2500);
      }
    });

    //      ,    
    mLoadingView.postDelayed(new Runnable() {
      @Override
      public void run() {
        mLoadingView.loadError();
      }
    },2500);


  }
}

사용자 정의 보기 사용
사용자 정의 view 호출 set 방법 만 설정 하면 됩 니 다.

this.mLoadingView.setLoadingView(loadingView);
this.mLoadingView.setLoadingErrorView(loadingErrorView);

public class CustomViewActivity extends AppCompatActivity {

  protected ListView mListView;
  protected CommonLoadingView mLoadingView;
  private List<String> mList = new ArrayList<>();
  ArrayAdapter adapter;


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

  private void initView() {
    mListView = (ListView) findViewById(R.id.listView);
    mLoadingView = (CommonLoadingView) findViewById(R.id.loadingView);


    //       
    ProgressBar progressBar = new ProgressBar(this);
    this.mLoadingView.setLoadingView(progressBar);
    TextView textView = new TextView(this);
    textView.setText("    ...");
    this.mLoadingView.setLoadingErrorView(textView);

    mLoadingView.load();

    //              
    mLoadingView.setLoadingHandler(new CommonLoadingView.LoadingHandler() {
      @Override
      public void doRequestData() {
        mLoadingView.postDelayed(new Runnable() {
          @Override
          public void run() {
            for (int i = 1; i <=20 ; i++) {
              mList.add(i+"");
            }
            adapter = new ArrayAdapter(CustomViewActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, mList);
            mListView.setAdapter(adapter);
            mLoadingView.loadSuccess(false);
          }
        },2500);
      }
    });

    //      ,    
    mLoadingView.postDelayed(new Runnable() {
      @Override
      public void run() {
        mLoadingView.loadError();
      }
    },2500);
  }
}

구체 적 인 레이아웃 과 스타일 파일 은 붙 이지 않 습 니 다.주로 사고,코드 를 실현 합 니 다.
다운로드 참고 하 세 요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기