例:
public class MainActivity 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(); } }); } }
public interface RefreshView { void showData(List<RefreshBean.DataBean> data); void showToast(String str,int length); }
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; } } } }
public class RefreshpresenterImp implements Refreshpresenter{ private RefreshView refreshView; private final RefreshModelImp refreshModelImp; private Context context; private MyDao dao; public RefreshpresenterImp(RefreshView refreshView, Context context) { this.refreshView = refreshView; this.context = context; refreshModelImp = new RefreshModelImp(); dao = new MyDao(context); } @Override public void showData(final String page) { boolean connect = NetStateUtils.isConnect(context); Log.e("JBK",connect+""); if(connect){ refreshModelImp.showData(page, new OnNetListener() { @Override public void OnSuccess(String result) { String replace = result.replace("null(", "").replace(")", ""); dao.insert(Api.REFRESH_URL + "?type=501" + page,replace); RefreshBean refreshBean = new Gson().fromJson(replace, RefreshBean.class); List<RefreshBean.DataBean> data = refreshBean.getData(); refreshView.showData(data); } @Override public void OnSuccess(byte[] bytes) { } @Override public void onFailed(Exception e) { } }); }else{ refreshView.showToast("没有网络", Toast.LENGTH_SHORT); String select = dao.select(Api.REFRESH_URL + "?type=501" + page); RefreshBean refreshBean = new Gson().fromJson(select, RefreshBean.class); List<RefreshBean.DataBean> data = refreshBean.getData(); refreshView.showData(data); } } public void closeView(){ if(refreshView != null){ refreshView = null; } } }
public interface Refreshpresenter { void showData(String page); }
public class RefreshModelImp implements RefreshModel{ @Override public void showData(String page, OnNetListener onNetListener) { OkhttpUtils.getInstener().doGet(Api.REFRESH_URL+"?type=50"+page,onNetListener); } }
public interface RefreshModel { void showData(String page, OnNetListener onNetListener); }
public interface OnNetListener { void OnSuccess(String result); void OnSuccess(byte[] bytes); void onFailed(Exception e); }
public class OkhttpUtils { private static OkhttpUtils instener; private OkHttpClient okHttpClient; private static Handler handler; private OkhttpUtils() { HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); okHttpClient = new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) .writeTimeout(15, TimeUnit.SECONDS) //.addInterceptor(new MyInterceptor()) .addInterceptor(logging) .build(); handler = new Handler(); } public static OkhttpUtils getInstener() { if (instener == null) { instener = new OkhttpUtils(); } return instener; } //处理请求网络成功的方法,返回的结果是Json字符串 private static void onSuccessJsonStringMethod(final String jsonValue ,final OnNetListener callBack){ handler.post(new Runnable() { @Override public void run() { if (callBack !=null){ callBack.OnSuccess(jsonValue); } } }); } //处理请求网络错误的方法 private static void onFailedJsonStringMethod(final Exception e, final OnNetListener onNetListener){ handler.post(new Runnable() { @Override public void run() { if(onNetListener != null){ onNetListener.onFailed(e); } } }); } /** * 封装GET方法 * @param url 网络路径 * @param onNetListener 接口对象 */ public void doGet(String url, final OnNetListener onNetListener) { //创建Request Request request = new Request.Builder().url(url).build(); //发送请求 okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { onFailedJsonStringMethod(e,onNetListener); } @Override public void onResponse(Call call, Response response) throws IOException { final String string= response.body().string(); handler.post(new Runnable() { @Override public void run() { onNetListener.OnSuccess(string); } }); } }); } /** * 封装post方法 * @param url 网络路径 * @param params 路径添加的参数 * @param onNetListener 接口 */ public void doPost(String url, Map<String, String> params, final OnNetListener onNetListener) { //创建formBody FormBody.Builder builder = new FormBody.Builder(); //添加参数 for (Map.Entry<String, String> entry : params.entrySet()) { builder.add(entry.getKey(), entry.getValue()); } FormBody formBody = builder.build(); //创建Request Request request = new Request.Builder() .url(url) .post(formBody) .build(); //请求网络 okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { onFailedJsonStringMethod(e,onNetListener); } @Override public void onResponse(Call call, Response response) throws IOException { final String string = response.body().string(); onSuccessJsonStringMethod(string,onNetListener); } }); } /** * 封装上传文件 * @param url 网络地址 * @param params 参数集合 * @param fileNmae 文件名 * @param file 文件 * @param onNetListener 接口 */ public void uploadFild(String url, Map<String, String> params, String fileNmae, File file, final OnNetListener onNetListener){ MultipartBody.Builder builder = new MultipartBody.Builder(); builder.setType(MultipartBody.FORM); //上传参数 for (Map.Entry<String, String> entry : params.entrySet()) { builder.addFormDataPart(entry.getKey(), entry.getValue()); } builder.addFormDataPart("file", fileNmae, RequestBody.create(MediaType.parse("application/octet-stream"),file)); MultipartBody multipartBody = builder.build(); Request request = new Request.Builder().url(url).post(multipartBody).build(); //发送请求 okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { onFailedJsonStringMethod(e,onNetListener); } @Override public void onResponse(Call call, Response response) throws IOException { final String string = response.body().string(); onSuccessJsonStringMethod(string,onNetListener); } }); } }
/** * 用于放置所有的网络路径 */ public interface Api { String REFRESH_URL = "http://ttpc.dftoutiao.com/jsonpc/refresh"; }
public class MyDao { private MyHelper myHelper; public MyDao(Context context) { myHelper = new MyHelper(context); } //添加 public void insert(String path,String json){ SQLiteDatabase sqLiteDatabase = myHelper.getWritableDatabase(); //添加之前把相同的数据删除 sqLiteDatabase.delete("news","urlpath = ?",new String[]{path}); //进行数据库的添加 ContentValues values = new ContentValues(); values.put("urlpath",path); values.put("jsondata",json); sqLiteDatabase.insert("news",null,values); Log.e("JBK","添加成功"); } //查询 public String select(String path){ String data = ""; SQLiteDatabase sqLiteDatabase = myHelper.getWritableDatabase(); Cursor cursor = sqLiteDatabase.query("news", null, "urlpath = ?", new String[]{path}, null, null, null); while (cursor.moveToNext()){ data = cursor.getString(cursor.getColumnIndex("jsondata")); } return data; } }
public class MyHelper extends SQLiteOpenHelper { public MyHelper(Context context) { super(context, "mydb", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table news(id integer primary key autoincrement,urlPath text,jsondata text)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
public class NetStateUtils { // 判断是否有网络 public static boolean isConnect(Context context){ boolean flag = true; // 得到管理器对象 ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // 得到网络信息类对象 NetworkInfo network = manager.getActiveNetworkInfo(); // 判断有无对象 if (network != null && network.isConnected()){ flag = true; }else { flag = false; } return flag; } }
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); } }
item_one
<?xml version="1.0" encoding="utf-8"?> <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
<?xml version="1.0" encoding="utf-8"?> <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>