안드로이드 통일된 네트워크 ui 디스플레이 클래스, 통일된 네트워크 관리 클래스
8318 단어 Android
잔말 말고 코드로 바로 올라가세요.
import android.content.Context;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
* Created by chenxiaoli on 2017/3/18 0018.
*
*
* activity,fragment,
*/
public class MyFramelayout extends FrameLayout {
private View successView;
private View loadingView;
private TextView emptyView;
private View errorView;
private OnReloadingListener listener;
public void setOnReloadingListener(OnReloadingListener listener) {
this.listener = listener;
}
public interface OnReloadingListener {
void onReloading();
}
public MyFramelayout(Context context, View loadingView, TextView emptyView, View errorView) {
super(context);
initView(context, loadingView, emptyView, errorView);
}
public MyFramelayout(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public MyFramelayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
/**
*
* @param context
* @return
*/
public boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (successView == null && getChildCount() > 3) {
successView = getChildAt(3);
successView.setVisibility(INVISIBLE);
if (getChildCount() > 4) {
throw new RuntimeException("MyFramelayout XML View");
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
private void initView(Context context) {
loadingView = LayoutInflater.from(context).inflate(R.layout.item_loading, this, false);
emptyView = (TextView) LayoutInflater.from(context).inflate(R.layout.item_load_empty, this, false);
errorView = LayoutInflater.from(context).inflate(R.layout.item_load_error, this, false);
errorView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
listener.onReloading();
}
onLoading();
}
});
addView(loadingView);
addView(emptyView);
addView(errorView);
if(isNetworkConnected(context)){
onError();
Toast.makeText(context," ",Toast.LENGTH_SHORT).show();
}else {
onLoading();
}
}
private void initView(Context context, View loadingView, TextView emptyView, View errorView) {
this.loadingView =loadingView;
this.emptyView = emptyView;
this.errorView = errorView;
errorView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
listener.onReloading();
}
onLoading();
}
});
addView(loadingView);
addView(emptyView);
addView(errorView);
onLoading();
}
public void setLoadingView(View loadingView) {
this.loadingView = (LinearLayout) loadingView;
removeViewAt(0);
addView(loadingView, 0);
}
public void setEmptyView(TextView emptyView) {
this.emptyView = emptyView;
removeViewAt(1);
addView(emptyView, 1);
}
public void setErrorView(View errorView) {
this.errorView = errorView;
errorView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
listener.onReloading();
}
onLoading();
}
});
removeViewAt(2);
addView(errorView, 2);
}
public void onLoading() {
if (successView != null) {
successView.setVisibility(INVISIBLE);
}
loadingView.setVisibility(VISIBLE);
emptyView.setVisibility(INVISIBLE);
errorView.setVisibility(INVISIBLE);
}
public void onError() {
if (successView != null) {
successView.setVisibility(INVISIBLE);
}
loadingView.setVisibility(INVISIBLE);
emptyView.setVisibility(INVISIBLE);
errorView.setVisibility(VISIBLE);
}
public void onSuccess() {
if (successView != null) {
successView.setVisibility(VISIBLE);
}
loadingView.setVisibility(INVISIBLE);
emptyView.setVisibility(INVISIBLE);
errorView.setVisibility(INVISIBLE);
}
public void onEmpty(String msg) {
if (successView != null) {
successView.setVisibility(INVISIBLE);
}
loadingView.setVisibility(INVISIBLE);
emptyView.setVisibility(VISIBLE);
emptyView.setText(msg);
errorView.setVisibility(INVISIBLE);
}
}
그리고 대응하는 xml 파일
item_loading
item_load_error
item_load_empty
너도 자신의 세 가지 피드 컨트롤을 정의할 수 있어 매우 유연하다
그리고 acitiviy에서 어떻게 사용하는지
package com.ftoul.myapplication.activitys;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.xxx.myapplication.ui.MyFramelayout;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.Callback;
import okhttp3.Call;
import okhttp3.Response;
public class DemoActivity extends AppCompatActivity {
private MyFramelayout myFramelayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
myFramelayout = (MyFramelayout) findViewById(R.id.myframelayout);
myFramelayout.setOnReloadingListener(new MyFramelayout.OnReloadingListener() {
@Override
public void onReloading() {
getData();
}
});
getData();
}
/**
*
*/
private void getData(){
String datas = "";// json
// OkHttp
OkHttpUtils
.postString()
.tag(this)
.url(MyURL.APP_SERVICE)//
.content(datas)
.build()
.execute(new Callback() {//
@Override
public Object parseNetworkResponse(Response response, int id) throws Exception {//
myFramelayout.onSuccess();
//
if( ){
myFramelayout.onEmpty(" ");
}
return null;
}
@Override
public void onError(Call call, Exception e, int id) {//
myFramelayout.onError();
}
@Override
public void onResponse(Object response, int id) {
}
});
}
}
대응하는 xml 파일은 다음과 같습니다
이상
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.