ShowDataActivity
public class ShowDataActivity extends AppCompatActivity implements RefreshView {
private RefreshpresenterImp refreshpresenterImp;
private XRecyclerView mXrv;
private String page;
private MyXrvAdapter myXrvAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data);
initView();
Intent intent = getIntent();
page = intent.getStringExtra("page");
int num = Integer.parseInt(page);
Log.e("JBK", page);
if(num < 10){
page = "0"+ page;
}
refreshpresenterImp = new RefreshpresenterImp(this,ShowDataActivity.this);
refreshpresenterImp.showData(page);
}
@Override
protected void onDestroy() {
super.onDestroy();
refreshpresenterImp.closeView();
}
@Override
public void showData(List<RefreshBean.DataBean> data) {
//适配器
myXrvAdapter = new MyXrvAdapter(ShowDataActivity.this, data);
mXrv.setAdapter(myXrvAdapter);
myXrvAdapter.setOnItemClickListener(new MyXrvAdapter.OnItemClickListener() {
@Override
public void onItemLongListener(int position) {
//弹出对话框
showAlertDialog(position);
}
});
}
private void showAlertDialog(final int position) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示:");
builder.setMessage("你确定要删除吗?");
builder.setCancelable(false);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
myXrvAdapter.deleteItem(position);
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
@Override
public void showToast(String str, int length) {
Toast.makeText(this, str, length).show();
}
private void initView() {
mXrv = (XRecyclerView) findViewById(R.id.xrv);
//布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mXrv.setLayoutManager(linearLayoutManager);
mXrv.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
refreshpresenterImp.showData(page);
mXrv.refreshComplete();
}
@Override
public void onLoadMore() {
int num = Integer.parseInt(page);
num++;
refreshpresenterImp.showData("0"+num);
mXrv.loadMoreComplete();
}
});
}
}
RefreshView
public interface RefreshView {
void showData(List<RefreshBean.DataBean> data);
void showToast(String str,int length);
}
RefreshBean
public class RefreshBean {
private String stat;
private List<DataBean> data;
public static RefreshBean objectFromData(String str) {
return new Gson().fromJson(str, RefreshBean.class);
}
public static RefreshBean objectFromData(String str, String key) {
try {
JSONObject jsonObject = new JSONObject(str);
return new Gson().fromJson(jsonObject.getString(str), RefreshBean.class);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public String getStat() {
return stat;
}
public void setStat(String stat) {
this.stat = stat;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* brief : 德国媒体《Sportbuzzer》的最新消息,莱万经纪人扎哈维透露其今夏铁心离队,并将自己的想法通报给了拜仁
* customtag : []
* daoPaiKey :
* date : 2018-05-30 10:26
* hotnews : 0
* isnxw : 0
* isrecom : 0
* isvideo : 0
* kw : []
* lbimg : [{"alt":"","describe":"","idx":1,"imgheight":275,"imgname":"20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpl_05500201.jpg","imgwidth":550,"src":"http://00.imgmini.eastday.com/mobile/20180530/20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpl_05500201.jpg"}]
* miniimg : [{"alt":"","describe":"","idx":1,"imgheight":240,"imgname":"20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpm_03200403.jpg","imgwidth":320,"src":"http://00.imgmini.eastday.com/mobile/20180530/20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpm_03200403.jpg"},{"alt":"","describe":"","idx":2,"imgheight":240,"imgname":"20180530102655_7e33f019f7f30ac59bd907e9d8e87984_1_mwpm_03200403.jpg","imgwidth":320,"src":"http://00.imgmini.eastday.com/mobile/20180530/20180530102655_7e33f019f7f30ac59bd907e9d8e87984_1_mwpm_03200403.jpg"}]
* miniimg02 : [{"alt":"","describe":"","idx":1,"imgheight":180,"imgname":"20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpm_03201609.jpg","imgwidth":320,"src":"http://00.imgmini.eastday.com/mobile/20180530/20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpm_03201609.jpg"},{"alt":"","describe":"","idx":2,"imgheight":180,"imgname":"20180530102655_7e33f019f7f30ac59bd907e9d8e87984_1_mwpm_03201609.jpg","imgwidth":320,"src":"http://00.imgmini.eastday.com/mobile/20180530/20180530102655_7e33f019f7f30ac59bd907e9d8e87984_1_mwpm_03201609.jpg"}]
* miniimg_size : 2
* pkey : []
* recommendtype : -1
* rowkey : 9223370509207560354
* source : 红色英超
* tag : []
* topic : 拜仁锋霸铁心离队,让经纪人施压;曼联今夏第一签倒计时
* type : tiyu
* url : 180530102655453.html
* urlpv : 0
*/
private String brief;
private String daoPaiKey;
private String date;
private String hotnews;
private String isnxw;
private String isrecom;
private String isvideo;
private String miniimg_size;
private String recommendtype;
private String rowkey;
private String source;
private String topic;
private String type;
private String url;
private String urlpv;
private List<?> customtag;
private List<?> kw;
private List<LbimgBean> lbimg;
private List<MiniimgBean> miniimg;
private List<Miniimg02Bean> miniimg02;
private List<?> pkey;
private List<?> tag;
public static DataBean objectFromData(String str) {
return new Gson().fromJson(str, DataBean.class);
}
public static DataBean objectFromData(String str, String key) {
try {
JSONObject jsonObject = new JSONObject(str);
return new Gson().fromJson(jsonObject.getString(str), DataBean.class);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public String getBrief() {
return brief;
}
public void setBrief(String brief) {
this.brief = brief;
}
public String getDaoPaiKey() {
return daoPaiKey;
}
public void setDaoPaiKey(String daoPaiKey) {
this.daoPaiKey = daoPaiKey;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getHotnews() {
return hotnews;
}
public void setHotnews(String hotnews) {
this.hotnews = hotnews;
}
public String getIsnxw() {
return isnxw;
}
public void setIsnxw(String isnxw) {
this.isnxw = isnxw;
}
public String getIsrecom() {
return isrecom;
}
public void setIsrecom(String isrecom) {
this.isrecom = isrecom;
}
public String getIsvideo() {
return isvideo;
}
public void setIsvideo(String isvideo) {
this.isvideo = isvideo;
}
public String getMiniimg_size() {
return miniimg_size;
}
public void setMiniimg_size(String miniimg_size) {
this.miniimg_size = miniimg_size;
}
public String getRecommendtype() {
return recommendtype;
}
public void setRecommendtype(String recommendtype) {
this.recommendtype = recommendtype;
}
public String getRowkey() {
return rowkey;
}
public void setRowkey(String rowkey) {
this.rowkey = rowkey;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getTopic() {
return topic;
}
public void setTopic(String topic) {
this.topic = topic;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrlpv() {
return urlpv;
}
public void setUrlpv(String urlpv) {
this.urlpv = urlpv;
}
public List<?> getCustomtag() {
return customtag;
}
public void setCustomtag(List<?> customtag) {
this.customtag = customtag;
}
public List<?> getKw() {
return kw;
}
public void setKw(List<?> kw) {
this.kw = kw;
}
public List<LbimgBean> getLbimg() {
return lbimg;
}
public void setLbimg(List<LbimgBean> lbimg) {
this.lbimg = lbimg;
}
public List<MiniimgBean> getMiniimg() {
return miniimg;
}
public void setMiniimg(List<MiniimgBean> miniimg) {
this.miniimg = miniimg;
}
public List<Miniimg02Bean> getMiniimg02() {
return miniimg02;
}
public void setMiniimg02(List<Miniimg02Bean> miniimg02) {
this.miniimg02 = miniimg02;
}
public List<?> getPkey() {
return pkey;
}
public void setPkey(List<?> pkey) {
this.pkey = pkey;
}
public List<?> getTag() {
return tag;
}
public void setTag(List<?> tag) {
this.tag = tag;
}
public static class LbimgBean {
/**
* alt :
* describe :
* idx : 1
* imgheight : 275
* imgname : 20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpl_05500201.jpg
* imgwidth : 550
* src : http://00.imgmini.eastday.com/mobile/20180530/20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpl_05500201.jpg
*/
private String alt;
private String describe;
private int idx;
private int imgheight;
private String imgname;
private int imgwidth;
private String src;
public static LbimgBean objectFromData(String str) {
return new Gson().fromJson(str, LbimgBean.class);
}
public static LbimgBean objectFromData(String str, String key) {
try {
JSONObject jsonObject = new JSONObject(str);
return new Gson().fromJson(jsonObject.getString(str), LbimgBean.class);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public String getAlt() {
return alt;
}
public void setAlt(String alt) {
this.alt = alt;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public int getImgheight() {
return imgheight;
}
public void setImgheight(int imgheight) {
this.imgheight = imgheight;
}
public String getImgname() {
return imgname;
}
public void setImgname(String imgname) {
this.imgname = imgname;
}
public int getImgwidth() {
return imgwidth;
}
public void setImgwidth(int imgwidth) {
this.imgwidth = imgwidth;
}
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
}
public static class MiniimgBean {
/**
* alt :
* describe :
* idx : 1
* imgheight : 240
* imgname : 20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpm_03200403.jpg
* imgwidth : 320
* src : http://00.imgmini.eastday.com/mobile/20180530/20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpm_03200403.jpg
*/
private String alt;
private String describe;
private int idx;
private int imgheight;
private String imgname;
private int imgwidth;
private String src;
public static MiniimgBean objectFromData(String str) {
return new Gson().fromJson(str, MiniimgBean.class);
}
public static MiniimgBean objectFromData(String str, String key) {
try {
JSONObject jsonObject = new JSONObject(str);
return new Gson().fromJson(jsonObject.getString(str), MiniimgBean.class);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public String getAlt() {
return alt;
}
public void setAlt(String alt) {
this.alt = alt;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public int getImgheight() {
return imgheight;
}
public void setImgheight(int imgheight) {
this.imgheight = imgheight;
}
public String getImgname() {
return imgname;
}
public void setImgname(String imgname) {
this.imgname = imgname;
}
public int getImgwidth() {
return imgwidth;
}
public void setImgwidth(int imgwidth) {
this.imgwidth = imgwidth;
}
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
}
public static class Miniimg02Bean {
/**
* alt :
* describe :
* idx : 1
* imgheight : 180
* imgname : 20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpm_03201609.jpg
* imgwidth : 320
* src : http://00.imgmini.eastday.com/mobile/20180530/20180530102655_7e33f019f7f30ac59bd907e9d8e87984_2_mwpm_03201609.jpg
*/
private String alt;
private String describe;
private int idx;
private int imgheight;
private String imgname;
private int imgwidth;
private String src;
public static Miniimg02Bean objectFromData(String str) {
return new Gson().fromJson(str, Miniimg02Bean.class);
}
public static Miniimg02Bean objectFromData(String str, String key) {
try {
JSONObject jsonObject = new JSONObject(str);
return new Gson().fromJson(jsonObject.getString(str), Miniimg02Bean.class);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public String getAlt() {
return alt;
}
public void setAlt(String alt) {
this.alt = alt;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public int getImgheight() {
return imgheight;
}
public void setImgheight(int imgheight) {
this.imgheight = imgheight;
}
public String getImgname() {
return imgname;
}
public void setImgname(String imgname) {
this.imgname = imgname;
}
public int getImgwidth() {
return imgwidth;
}
public void setImgwidth(int imgwidth) {
this.imgwidth = imgwidth;
}
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
}
}
}
MyXrvAdapter
public class MyXrvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private final int ONE = 0;
private final int TWO = 1;
private Context context;
private List<RefreshBean.DataBean> list;
public MyXrvAdapter(Context context, List<RefreshBean.DataBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder;
if(viewType == ONE){
View inflate = LayoutInflater.from(context).inflate(R.layout.item_one,null,false);
viewHolder = new OneViewHolder(inflate);
}else if(viewType == TWO){
View inflate = LayoutInflater.from(context).inflate(R.layout.item_two,null,false);
viewHolder = new TwoViewHolder(inflate);
}else{
viewHolder = null;
}
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
RefreshBean.DataBean dataBean = list.get(position);
int viewType = getItemViewType(position);
if(viewType == ONE){
OneViewHolder oneViewHolder = (OneViewHolder) holder;
oneViewHolder.title_one.setText(dataBean.getTopic());
Glide.with(context).load(dataBean.getLbimg().get(0).getSrc()).into(oneViewHolder.image01);
Glide.with(context).load(dataBean.getLbimg().get(0).getSrc()).into(oneViewHolder.image02);
Glide.with(context).load(dataBean.getLbimg().get(0).getSrc()).into(oneViewHolder.image03);
oneViewHolder.time_one.setText(dataBean.getDate()+" "+dataBean.getSource());
oneViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(mOnItemClickListener != null){
mOnItemClickListener.onItemLongListener(position);
}
return true;
}
});
}else if(viewType == TWO){
TwoViewHolder twoViewHolder = (TwoViewHolder) holder;
twoViewHolder.title_two.setText(dataBean.getTopic());
Glide.with(context).load(dataBean.getLbimg().get(0).getSrc()).into(twoViewHolder.image_two);
twoViewHolder.time_two.setText(dataBean.getDate()+" "+dataBean.getSource());
twoViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(mOnItemClickListener != null){
mOnItemClickListener.onItemLongListener(position);
}
return true;
}
});
}
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public int getItemViewType(int position) {
if(position % 3 == 0){
return TWO;
}else{
return ONE;
}
}
class OneViewHolder extends RecyclerView.ViewHolder{
private final TextView title_one;
private final ImageView image01;
private final ImageView image02;
private final ImageView image03;
private final TextView time_one;
public OneViewHolder(View itemView) {
super(itemView);
title_one = itemView.findViewById(R.id.title_one);
image01 = itemView.findViewById(R.id.image01);
image02 = itemView.findViewById(R.id.image02);
image03 = itemView.findViewById(R.id.image03);
time_one = itemView.findViewById(R.id.time_one);
}
}
class TwoViewHolder extends RecyclerView.ViewHolder{
private final ImageView image_two;
private final TextView title_two;
private final TextView time_two;
public TwoViewHolder(View itemView) {
super(itemView);
image_two = itemView.findViewById(R.id.image_two);
title_two = itemView.findViewById(R.id.title_two);
time_two = itemView.findViewById(R.id.time_two);
}
}
//设置接口
public interface OnItemClickListener{
void onItemLongListener(int position);
}
private OnItemClickListener mOnItemClickListener;
//设置方法
public void setOnItemClickListener(OnItemClickListener listener){
this.mOnItemClickListener = listener;
}
//删除
public void deleteItem(int position){
list.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, list.size()-position);
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/xrv"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView>
</LinearLayout>
item_one
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/title_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="18dp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image01"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_weight="1" />
<ImageView
android:id="@+id/image02"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_weight="1" />
<ImageView
android:id="@+id/image03"
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/time_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
item_two
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:id="@+id/image_two"
android:layout_width="100sp"
android:layout_height="100sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/title_two"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:textSize="20dp"
android:textStyle="bold" />
<TextView
android:id="@+id/time_two"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textColor="#888888" />
</LinearLayout>
</LinearLayout>