1.工具类
package com.example.utils;
import android.util.Log;
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/**
* Created by 。 on 2018/12/14.
*/
public class HttpUtils {
private static final String TAG = "HttpUtils";
private static HttpUtils httpUtils = new HttpUtils();
private HttpUtils(){
}
public static HttpUtils getHttpUtils(){
if(httpUtils==null){
httpUtils = new HttpUtils();
}
return httpUtils;
}
public String getString(String url){
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).get().build();
try {
Response response = okHttpClient.newCall(request).execute();
// Log.d(TAG, "getString: 1111"+response.body().string());
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
2.Model层
package com.example.model;
import android.util.Log;
import com.example.bean.Result;
import com.example.bean.User;
import com.example.utils.HttpUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
/**
* Created by 。 on 2018/12/14.
*/
public class MyModel {
private static final String TAG = "MyModel";
public Result getData(String page){
String urll="http://www.xieast.com/api/news/news.php?page="+page;
HttpUtils httpUtils = HttpUtils.getHttpUtils();
String data = httpUtils.getString(urll);
Gson gson = new Gson();
Type type = new TypeToken<Result<List<User>>>() {}.getType();
Result result = gson.fromJson(data, type);
Log.d(TAG, "getData: 11111111"+result.toString());
return result;
}
}
3.Presenter层父类
package com.example.presenter;
import android.os.AsyncTask;
import com.example.bean.Result;
import com.example.core.BaseCall;
/**
* Created by 。 on 2018/12/14.
*/
public abstract class BasePresenter {
public BaseCall baseCall;
public BasePresenter(BaseCall baseCall){
this.baseCall = baseCall;
}
public void unbindBaseCall(){
baseCall = null;
}
public void getdata(String...args){
new MyTask().execute(args);
}
class MyTask extends AsyncTask<String,Void,Result>{
@Override
protected Result doInBackground(String... strings) {
Result result = getAD(strings);
return result;
}
@Override
protected void onPostExecute(Result result) {
super.onPostExecute(result);
if(result.getCode().equals("1")){
baseCall.loadSuccess(result.getData());
}else{
baseCall.loadError(result);
}
}
}
protected abstract Result getAD(String...args);
}
子类
package com.example.presenter;
import com.example.bean.Result;
import com.example.core.BaseCall;
import com.example.model.MyModel;
/**
* Created by 。 on 2018/12/14.
*/
public class MyPresenter extends BasePresenter {
public MyPresenter(BaseCall baseCall) {
super(baseCall);
}
@Override
protected Result getAD(String... args) {
Result result = new MyModel().getData(args[0]);
return result;
}
}
4.MainActivity
public class MainActivity extends AppCompatActivity implements BaseCall {
//使用黄油刀
@BindView(R.id.image_view)
CircleImageView imageView;
@BindView(R.id.text_view)
TextView textView;
@BindView(R.id.btn_login)
Button btnLogin;
private static final String TAG = "MainActivity";
@BindView(R.id.recy_view)
RecyclerView recyView;
@BindView(R.id.pull_view)
PullToRefreshScrollView pullView;
private int page = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//用PullToRrfreashScrllView实现了上下拉
pullView.setMode(PullToRefreshBase.Mode.BOTH);
pullView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
page = 1;
new MyPresenter(MainActivity.this).getdata(page+"");
pullView.onRefreshComplete();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
page++;
new MyPresenter(MainActivity.this).getdata(page+"");
pullView.onRefreshComplete();
}
});
new MyPresenter(this).getdata(page+"");
}
@Override
public void loadSuccess(Object data) {
Toast.makeText(this, "hhh", Toast.LENGTH_SHORT).show();
final List <User> list = (List<User>) data;
final MyAdapter adapter = new MyAdapter(list,MainActivity.this);
//点击条目实现从不透明到透明再到不透明
adapter.setOnItmeClickListener(new MyAdapter.ClickListener() {
@Override
public void onItmeClickListener(View view, int position) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 1f, 0, 1f);
objectAnimator.setDuration(3000);
objectAnimator.setInterpolator(new LinearInterpolator());
objectAnimator.start();
}
});
//长按条目删除
adapter.setOnLongItmeClickListener(new MyAdapter.LongClickListener() {
@Override
public void onLongItmeClickListener(View view, final int position) {
User user = adapter.getBean(position);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("是否确定删除"+list.get(position));
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
list.remove(position);
adapter.notifyDataSetChanged();
}
});
builder.setNegativeButton("取消",null);
builder.show();
}
});
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyView.setLayoutManager(linearLayoutManager);
recyView.setAdapter(adapter);
}
@Override
public void loadError(Result result) {
}
5.适配器
package com.example.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.bean.User;
import com.example.lianxizk3.MainActivity;
import com.example.lianxizk3.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by 。 on 2018/12/14.
*/
public class MyAdapter extends RecyclerView.Adapter{
private List<User> list = new ArrayList<>();
private Context context;
private ClickListener clickListener;
private LongClickListener longClickListener;
public MyAdapter(List<User> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType==0){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.one, parent, false);
return new MyViewHolder(view);
}else if(viewType==1){
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.two, parent, false);
return new ViewHolder2(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
int itemViewType = holder.getItemViewType();
switch (itemViewType){
case 0:
MyViewHolder myViewHolder = (MyViewHolder) holder;
myViewHolder.textView1.setText(list.get(position).getTitle());
Glide.with(context).load(list.get(position).getThumbnail_pic_s()).into(myViewHolder.imageView1);
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickListener.onItmeClickListener(v,position);
}
});
myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
longClickListener.onLongItmeClickListener(v,position);
return true;
}
});
break;
case 1:
ViewHolder2 holder2 = (ViewHolder2) holder;
holder2.textView2.setText(list.get(position).getTitle());
Glide.with(context).load(list.get(position).getThumbnail_pic_s()).into(holder2.imageView21);
Glide.with(context).load(list.get(position).getThumbnail_pic_s02()).into(holder2.imageView22);
Glide.with(context).load(list.get(position).getThumbnail_pic_s03()).into(holder2.imageView23);
holder2.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickListener.onItmeClickListener(v,position);
}
});
holder2.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
longClickListener.onLongItmeClickListener(v,position);
return true;
}
});
break;
}
}
public User getBean(int position){
User user = list.get(position);
return user;
}
@Override
public int getItemViewType(int position) {
String a1 = list.get(position).getThumbnail_pic_s();
String a2 = list.get(position).getThumbnail_pic_s02();
String a3 = list.get(position).getThumbnail_pic_s03();
if(!TextUtils.isEmpty(a2)&&!TextUtils.isEmpty(a3)){
return 1;
}else{
return 0;
}
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
private final ImageView imageView1;
private final TextView textView1;
public MyViewHolder(View itemView) {
super(itemView);
imageView1 = itemView.findViewById(R.id.one_image);
textView1 = itemView.findViewById(R.id.one_text);
}
}
class ViewHolder2 extends RecyclerView.ViewHolder{
private final TextView textView2;
private final ImageView imageView21;
private final ImageView imageView22;
private final ImageView imageView23;
public ViewHolder2(View itemView) {
super(itemView);
textView2 = itemView.findViewById(R.id.two_view);
imageView21 = itemView.findViewById(R.id.two_image1);
imageView22 = itemView.findViewById(R.id.two_image2);
imageView23 = itemView.findViewById(R.id.two_image3);
}
}
public interface ClickListener{
void onItmeClickListener(View view,int position);
}
public void setOnItmeClickListener(ClickListener clickListener){
this.clickListener = clickListener;
}
public interface LongClickListener{
void onLongItmeClickListener(View view,int position);
}
public void setOnLongItmeClickListener(LongClickListener longClickListener){
this.longClickListener = longClickListener;
}
}
6.xml
<com.handmark.pulltorefresh.library.PullToRefreshScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pull_view">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recy_view"></android.support.v7.widget.RecyclerView>
</LinearLayout>
</com.handmark.pulltorefresh.library.PullToRefreshScrollView>
7.在build.gradle中添加依赖
//butterknife的依赖
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
//gson的依赖
implementation files('libs/gson-2.5.jar')
//glide的依赖
compile 'com.github.bumptech.glide:glide:3.8.0'
//okhttp的依赖
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
//recyclerview的依赖
implementation 'com.android.support:recyclerview-v7:26.1.0'
8.在清单文件中添加依赖
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 必须的权限 -->