搭建的框架
public class HttpUtils implements Callback, okhttp3.Callback {
private final OkHttpClient okHttpClient;
private static HttpUtils INSTENCE;
private HttpUtilsCallback httpUtilsCallback;
public HttpUtils(){
okHttpClient = new OkHttpClient.Builder().build();
}
public static HttpUtils getInstence(){
synchronized (HttpUtils.class) {
if (INSTENCE == null) {
INSTENCE = new HttpUtils();
}
}
return INSTENCE;
}
//get请求方法
public void doGet(String path, HttpUtilsCallback httpUtilsCallback){
this.httpUtilsCallback = httpUtilsCallback;
Request request = new Request.Builder()
.url(path)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(this);
}
//post请求方法
public void doPost(String path, HttpUtilsCallback httpUtilsCallback){
this.httpUtilsCallback = httpUtilsCallback;
FormBody formBody = new FormBody.Builder().build();
Request request = new Request.Builder()
.url(path)
.post(formBody)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(this);
}
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
httpUtilsCallback.onSuccess(string);
}
}
HttpUtilsCallback
public interface HttpUtilsCallback {
void onSuccess(String str);
void onFail(int errCode, String errMsg);
}
BasePresenter
public class BasePresenter<V extends IBaseView> {
private V ibseview;
public void attachView(V ibseview){
this.ibseview = ibseview;
}
public V getView(){
return ibseview;
}
public void detachView(){
ibseview = null;
}
}
MainPresenter
public class MainPresenter extends BasePresenter<IMainView> {
private final HttpUtils httpUtils;
public MainPresenter(){
httpUtils = HttpUtils.getInstence();
}
public void getData(String path){
httpUtils.doGet(path, new HttpUtilsCallback() {
@Override
public void onSuccess(String str) {
getView().onSuccess(str);
}
@Override
public void onFail(int errCode, String errMsg) {
}
});
}
}
BaseActivity
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements IBaseView {
public P presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(setLayout());
initView();
presenter = getPresenter();
presenter.attachView(this);
initData();
}
protected abstract int setLayout();
protected abstract P getPresenter();
protected abstract void initData();
protected abstract void initView();
}
MainActivity
public class MainActivity extends BaseActivity<MainPresenter> implements IMainView {
private RecyclerView recycler;
private RecyclerAdapter recyclerAdapter;
ArrayList<RecyclerBean.DataBean> list = new ArrayList<>();
private HttpUtils httpUtils;
int a;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==1){
//拿到数据
String json = (String) msg.obj;
//解析数据
Gson gson = new Gson();
RecyclerBean recyclerBean = gson.fromJson(json, RecyclerBean.class);
List<RecyclerBean.DataBean> data = recyclerBean.getData();
list.addAll(data);
recyclerAdapter.setData(list);
recyclerAdapter.notifyDataSetChanged();
}
if (msg.what==2){
recyclerAdapter.notifyDataSetChanged();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected int setLayout() {
return R.layout.activity_main;
}
@Override
protected MainPresenter getPresenter() {
return new MainPresenter();
}
@Override
protected void initView() {
recycler = findViewById(R.id.recycler);
}
@Override
protected void initData() {
//设置布局管理器
recycler.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
//设置适配器
recyclerAdapter = new RecyclerAdapter(this, list);
recycler.setAdapter(recyclerAdapter);
//加载数据
String path = "http://api.expoon.com/AppNews/getNewsList/type/1/p/";
presenter.getData(path);
//调用自定义
recyclerAdapter.setOnLongClickListener(new RecyclerAdapter.MyOnLongClickListener() {
@Override
public void OnItemLongClickListener(View view, int position) {
a = position;
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("确定删除吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
list.remove(a);
handler.sendEmptyMessage(2);
}
});
builder.setNegativeButton("取消",null);
builder.show();
}
});
}
@Override
public void onSuccess(String str) {
Message msg = Message.obtain();
msg.what = 1;
msg.obj = str;
handler.sendMessage(msg);
}
}
RecyclerAdapter
public class RecyclerAdapter extends RecyclerView.Adapter implements View.OnLongClickListener {
private Context context;
private ArrayList<RecyclerBean.DataBean> list;
private MyOnLongClickListener myOnLongClickListener;
public RecyclerAdapter(Context context, ArrayList<RecyclerBean.DataBean> list) {
this.context = context;
this.list = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//View view = null;
RecyclerView.ViewHolder holder = null;
switch (viewType){
case 0:
View inflate = View.inflate(context, R.layout.layout_item00, null);
holder = new ViewHolderOne(inflate);
inflate.setOnLongClickListener(this);
break;
case 1:
View infla = View.inflate(context, R.layout.layout_item11, null);
holder = new ViewHolderTwo(infla);
infla.setOnLongClickListener(this);
break;
}
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
switch (getItemViewType(position)){
case 0:
final ViewHolderOne holderOne = (ViewHolderOne) holder;
holderOne.textview00_title.setText(list.get(position).getNews_title());
holderOne.textview00_speak.setText(list.get(position).getNews_id());
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(list.get(position).getPic_url(),holderOne.imgview00);
holderOne.imgview00.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 透明度变化从1—>0.1—>1—>0.5—>1,TextView对象经历4次透明度渐变
ObjectAnimator anim = ObjectAnimator.ofFloat(v, "alpha", 1f, 0.1f, 1f, 0.5f, 1f);
anim.setDuration(5000);// 动画持续时间
anim.start();
}
});
holderOne.itemView.setId(position);
break;
case 1:
ViewHolderTwo holderTwo = (ViewHolderTwo) holder;
holderTwo.textview11_title.setText(list.get(position).getNews_title());
holderTwo.textview11_speak.setText(list.get(position).getNews_id());
ImageLoader imageLoaderr = ImageLoader.getInstance();
imageLoaderr.displayImage(list.get(position).getPic_url(),holderTwo.imgview110);
imageLoaderr.displayImage(list.get(position).getPic_url(),holderTwo.imgview111);
/*holderTwo.textview11_title.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("确定删除吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
list.remove(position);
notifyDataSetChanged();
}
});
builder.setNegativeButton("取消",null);
builder.show();
return false;
}
});*/
holderTwo.itemView.setId(position);
break;
}
}
@Override
public int getItemCount() {
return list.size();
}
public void setData(List<RecyclerBean.DataBean> data) {
list.addAll(data);
}
@Override
public int getItemViewType(int position) {
if (position%2 == 0){
return 0;
} else {
return 1;
}
}
private class ViewHolderOne extends RecyclerView.ViewHolder{
private final TextView textview00_title;
private final TextView textview00_speak;
private final ImageView imgview00;
public ViewHolderOne(View itemView) {
super(itemView);
textview00_title = itemView.findViewById(R.id.textview00_title);
textview00_speak = itemView.findViewById(R.id.textview00_speak);
imgview00 = itemView.findViewById(R.id.imgview00);
}
}
private class ViewHolderTwo extends RecyclerView.ViewHolder{
private final TextView textview11_title;
private final TextView textview11_speak;
private final ImageView imgview110;
private final ImageView imgview111;
public ViewHolderTwo(View itemView) {
super(itemView);
textview11_title = itemView.findViewById(R.id.textview11_title);
textview11_speak = itemView.findViewById(R.id.textview11_speak);
imgview110 = itemView.findViewById(R.id.imgview110);
imgview111 = itemView.findViewById(R.id.imgview111);
}
}
@Override
public boolean onLongClick(View v) {
if (myOnLongClickListener != null){
myOnLongClickListener.OnItemLongClickListener(v,v.getId());
}
return true;
}
public void setOnLongClickListener(MyOnLongClickListener listener){
this.myOnLongClickListener = listener;
}
public interface MyOnLongClickListener{
void OnItemLongClickListener(View view, int position);
}
}