依赖
implementation 'com.facebook.fresco:fresco:1.10.0' implementation 'com.squareup.okhttp3:okhttp:3.11.0' implementation 'com.google.code.gson:gson:2.8.5' implementation 'com.android.support:recyclerview-v7:28.0.0-beta01' implementation 'org.greenrobot:eventbus:3.0.0' implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
添加Ok封装
activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dianji"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/aaa"
tools:context=".MainActivity">
<TextView
android:id="@+id/main_tv"
android:textSize="40sp"
android:text="Good Morning"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#21c951"
android:layout_marginTop="50dp"/>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/main_simple"
android:layout_marginTop="30dp"
android:layout_gravity="center"
android:src="@drawable/ic_launcher_background"
app:roundAsCircle="true"
app:actualImageScaleType="center"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
MainActivity
public class MainActivity extends AppCompatActivity {
@BindView(R.id.main_tv)
TextView mainTv;
@BindView(R.id.main_simple)
SimpleDraweeView mainSimple;
@BindView(R.id.dianji)
LinearLayout dianji;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
EventBus.getDefault().register(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void Event(MessageEvent messageEvent) {
mainTv.setText(messageEvent.getMessage());
mainSimple.setImageURI(messageEvent.getPic());
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@OnClick(R.id.dianji)
public void onViewClicked() {
startActivity(new Intent(MainActivity.this, ShowActivity.class));
}
}
activity_show
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".view.ShowActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> </LinearLayout>
ShowActivity
public class ShowActivity extends AppCompatActivity implements Iview {
@BindView(R.id.recyclerview)
RecyclerView recyclerview;
private List<DrawableBean.ResultsBean> mResults;
private Presenter mPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
ButterKnife.bind(this);
recyclerview.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
recyclerview.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
mPresenter = new Presenter(this);
mPresenter.getdatas();
}
@Override
public void viewSuccess(DrawableBean drawableBean) {
mResults = drawableBean.getResults();
runOnUiThread(new Runnable() {
@Override
public void run() {
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(ShowActivity.this, mResults);
recyclerview.setAdapter(recyclerAdapter);
recyclerAdapter.setItemClick(new RecyclerAdapter.ItemClick() {
@Override
public void item(String url, TextView title) {
Toast.makeText(ShowActivity.this, "厉害了", Toast.LENGTH_SHORT).show();
String s = title.getText().toString();
EventBus.getDefault().post(new MessageEvent(s,url));
finish();
}
});
}
});
}
@Override
public void viewFail(int code) {
}
}
View Iview 接口
public interface Iview {
void viewSuccess(DrawableBean drawableBean);
void viewFail(int code);
}
MyApp
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
model Imodel 接口
public interface Imodel { void modelSuccess(DrawableBean drawableBean); void modelFail(int code); }
model Model
public class Model { private static final String TAG = "Model"; public void getdata(final Imodel imodel){ OkHttpUtils.doGet("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/1", new Callback() { @Override public void onFailure(Call call, IOException e) { Log.i(TAG, "model:网络请求失败 "); imodel.modelFail(1); } @Override public void onResponse(Call call, Response response) throws IOException { Log.i(TAG, "model:网络请求成功 "); String json = response.body().string(); DrawableBean drawableBean = new Gson().fromJson(json, DrawableBean.class); imodel.modelSuccess(drawableBean); } }); } }
presenter Ipresenter 接口
public interface Ipresenter { void onDestroys(); }
presenter Presenter
public class Presenter implements Ipresenter { private Iview mIview; private Model mModel; public Presenter(Iview iview) { mIview = iview; mModel = new Model(); } public void getdatas(){ mModel.getdata(new Imodel() { @Override public void modelSuccess(DrawableBean drawableBean) { mIview.viewSuccess(drawableBean); } @Override public void modelFail(int code) { mIview.viewFail(code); } }); } @Override public void onDestroys() { if (mIview != null){ mIview = null; } } }
holder RecyclerHolder
public class RecyclerHolder extends RecyclerView.ViewHolder { public SimpleDraweeView item_simple; public TextView item_title; public RecyclerHolder(@NonNull View itemView) { super(itemView); item_simple = itemView.findViewById(R.id.item_simple); item_title = itemView.findViewById(R.id.item_title); } }
adapter RecyclerAdapter
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerHolder> { private Context mContext; private List<DrawableBean.ResultsBean> mResults; public RecyclerAdapter(Context context, List<DrawableBean.ResultsBean> results) { mContext = context; mResults = results; } private View mView; @NonNull @Override public RecyclerHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { mView = LayoutInflater.from(mContext).inflate(R.layout.item_show, null); return new RecyclerHolder(mView); } @Override public void onBindViewHolder(@NonNull final RecyclerHolder recyclerHolder, final int i) { String who = mResults.get(i).getWho(); String url = mResults.get(i).getUrl(); recyclerHolder.item_simple.setImageURI(url); recyclerHolder.item_title.setText(who); recyclerHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mItemClick.item(mResults.get(i).getUrl(),recyclerHolder.item_title); } }); } @Override public int getItemCount() { return mResults.size(); } private ItemClick mItemClick; public void setItemClick(ItemClick itemClick) { mItemClick = itemClick; } public interface ItemClick { void item(String url, TextView title); } }
bean MessageEvent
public class MessageEvent { private String message; private String pic; public MessageEvent(String message, String pic) { this.message = message; this.pic = pic; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public void setPic(String pic) { this.pic = pic; } public String getPic() { return pic; } }
item_show
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="horizontal" android:layout_width="match_parent" android:padding="10dp" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/item_simple" android:src="@drawable/ic_launcher_background" app:roundAsCircle="true" app:actualImageScaleType="centerCrop" android:layout_width="150dp" android:layout_height="150dp" /> <TextView android:id="@+id/item_title" android:layout_marginTop="30dp" android:layout_marginLeft="50dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>