Call层接口
public interface MyCallBack<T> {
void setData(T data);
void setError(T error);
}
model层接口实现
public interface Model {
void getData(String url, int index, MyCallBack callBack);
}
public class ModelImp implements Model{
private MyCallBack callBack;
private Handler mp = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==0){
callBack.setData(msg.obj);
}
}
};
@Override
public void getData(final String url, final int index, final MyCallBack callBack) {
this.callBack = callBack;
new Thread(new Runnable() {
@Override
public void run() {
try {
String jsonStr = OkHttpUtils.getInctance().get(url,index,callBack);
Gson gson = new Gson();
Data data = gson.fromJson(jsonStr, Data.class);
mp.sendMessage(mp.obtainMessage(0,data.getData()));
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
presenter层接口实现
public interface Persenter {
void startRequest(String url,int index);
}
public class PersenterImp implements Persenter{
private IView iView;
private ModelImp modelImp;
public PersenterImp(IView iView) {
this.iView = iView;
modelImp = new ModelImp();
}
@Override
public void startRequest(String url, int index) {
modelImp.getData(url, index, new MyCallBack() {
@Override
public void setData(Object data) {
iView.getSuccess(data);
}
@Override
public void setError(Object error) {
iView.getError(error);
}
});
}
}
utils网络请求
public class PersenterImp implements Persenter{
private IView iView;
private ModelImp modelImp;
public PersenterImp(IView iView) {
this.iView = iView;
modelImp = new ModelImp();
}
@Override
public void startRequest(String url, int index) {
modelImp.getData(url, index, new MyCallBack() {
@Override
public void setData(Object data) {
iView.getSuccess(data);
}
@Override
public void setError(Object error) {
iView.getError(error);
}
});
}
}
view层接口
public interface IView<T> {
void getSuccess(T data);
void getError(T error);
}
适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener{
private ArrayList<Data.DataBean> lists;
private Context context;
public MyAdapter(ArrayList<Data.DataBean> lista, Context contexta) {
this.lists = lista;
this.context = contexta;
}
@NonNull
@Override
public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(context).inflate(R.layout.item,viewGroup,false);
ViewHolder viewHolder = new ViewHolder(v);
v.setOnClickListener(this);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyAdapter.ViewHolder viewHolder, int i) {
ViewGroup.LayoutParams params = viewHolder.itemView.getLayoutParams();
Random random = new Random();
int gao = random.nextInt(300)+300;
params.height = gao;
viewHolder.itemView.setLayoutParams(params);
Glide.with(context).load(lists.get(i).getPic_url()).into(viewHolder.img);
viewHolder.textView.setText(lists.get(i).getNews_title());
viewHolder.textView1.setText(lists.get(i).getNews_id()+"¥");
viewHolder.itemView.setTag(i);
}
@Override
public int getItemCount() {
return lists.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView img;
private TextView textView;
private final TextView textView1;
public ViewHolder(@NonNull View itemView) {
super(itemView);
img = itemView.findViewById(R.id.img);
textView = itemView.findViewById(R.id.text);
textView1 = itemView.findViewById(R.id.text1);
}
}
public interface ItemClick {
void setOnItemClick(View view, int position);
}
private ItemClick mItemClick;
public void setOnClickListener(ItemClick itemClick) {
this.mItemClick = itemClick;
}
@Override
public void onClick(View v) {
if (mItemClick != null) {
mItemClick.setOnItemClick(v, (int) v.getTag());
}
}
}
网格
public class OneFragment<T> extends Fragment implements IView<T>{
private String mUrl = "http://www.zhaoapi.cn/product/searchProducts?keywords=%E6%89%8B%E6%9C%BA&page=";
private PersenterImp persenterImp;
private ArrayList<Data.DataBean> lists = new ArrayList<>();
private int index = 1;
private MyAdapter adapter;
private XRecyclerView recy;
private GridLayoutManager gridLayoutManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_one, container, false);
initView(view);
persenterImp = new PersenterImp(this);
adapter = new MyAdapter(lists, getActivity());
persenterImp.startRequest(mUrl,index);
gridLayoutManager = new GridLayoutManager(getActivity(), 2);
recy.setLayoutManager(gridLayoutManager);
recy.setAdapter(adapter);
adapter.setOnClickListener(new MyAdapter.ItemClick() {
@Override
public void setOnItemClick(View view, int position) {
Intent intent = new Intent(getActivity(), Main2Activity.class);
String url = lists.get(position).getDetailUrl();
int pid = lists.get(position).getPid();
String replace = url.replace("https", "http");
intent.putExtra("url",replace+pid);
startActivity(intent);
}
});
//上拉下拉的监听
recy.setLoadingMoreEnabled(true);
recy.setPullRefreshEnabled(true);
recy.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
lists.clear();
index = 1;
persenterImp.startRequest(mUrl,index);
recy.refreshComplete();
}
},1000);
}
@Override
public void onLoadMore() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
index++;
persenterImp.startRequest(mUrl,index);
recy.refreshComplete();
}
},1000);
}
});
return view;
}
private void initView(View view) {
recy = view.findViewById(R.id.recy);
}
@Override
public void getSuccess(Object data) {
lists.addAll((Collection<? extends Data.DataBean>) data);
adapter.notifyDataSetChanged();
}
@Override
public void getError(Object error) {
Toast.makeText(getActivity(), "失败", Toast.LENGTH_SHORT).show();
}
}
webview跳转
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
WebView send_web = findViewById(R.id.web);
Intent intent = getIntent();
String url = intent.getStringExtra("url");
WebSettings settings = send_web.getSettings();
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setJavaScriptEnabled(true);
send_web.setWebViewClient(new WebViewClient());
send_web.loadUrl(url);
}
}
XRecyclerView依赖
implementation ('com.jcodecraeer:xrecyclerview:1.5.9'){
exclude group: 'com.android.support'
}