垂直RecyclerView中的动态不同图像水平RecyclerView,如Google Play商店

我一直在关注本教程:

http://android-pratap.blogspot.co.za/2015/12/horizo​​ntal-recyclerview-in-vertical.html

所有代码都在博客上。 我试图以不同方式实现的是,我不是一遍又一遍地加载相同的图像,而是想从3个不同的ArrayLists提取3组图像。 到目前为止,我使用1个ArrayList而不是加载18个图像,相同的6个图像被加载3次,因此它是3个重复的图像集,而不是所有3行中的唯一图像。

这就是我想要的 (如果可能的话,来自3个arraylists):

img0 img1 img2 img3 img4 img5

img6 img7 img8 img9 img10 img11

img12 img13 img14 img15 img16 img17

这就是我得到的:

img0 img1 img2 img3 img4 img5

img0 img1 img2 img3 img4 img5

img0 img1 img2 img3 img4 img5

这是我编辑的代码:

DownloadImageTask.java

 import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.widget.ImageView; import java.io.InputStream; public class DownloadImageTask extends AsyncTask { ImageView bmImage; public DownloadImageTask(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(String... urls) { String urlDisplay = urls[0]; Bitmap mIcon11 = null; try { InputStream in = new java.net.URL(urlDisplay).openStream(); mIcon11 = BitmapFactory.decodeStream(in); } catch (Exception e) { e.printStackTrace(); } return mIcon11; } protected void onPostExecute(Bitmap result) { bmImage.setImageBitmap(result); } } 

SectionListDataAdapter.java

 import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import com.mypackage.appname.R; import com.mypackage.appname.common.asyncTasks.DownloadImageTask; import import com.mypackage.appname.common.models.SingleItemModel; public class SectionListDataAdapter extends RecyclerView.Adapter { private ArrayList itemsList; private Context mContext; //Images Start ArrayList urls = new ArrayList(); //Download Images DownloadImageTask dit; //Images End public SectionListDataAdapter(Context context, ArrayList itemsList) { this.itemsList = itemsList; this.mContext = context; } @Override public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_single_card, null); SingleItemRowHolder mh = new SingleItemRowHolder(v); return mh; } @Override public void onBindViewHolder(SingleItemRowHolder holder, int i) { SingleItemModel singleItem = itemsList.get(i); holder.tvTitle.setText(singleItem.getName()); urls.add("http:mywebsite.com/images/d"+i+".jpg"); //Set Splash Images START if(holder.itemImage!=null){ dit = new DownloadImageTask(holder.itemImage); Log.e("itemImage", String.valueOf(holder.itemImage)); try{ Log.e("imageUrls", urls.get(i)); dit.execute(urls.get(i)); } catch (NullPointerException e){ e.printStackTrace(); } } } @Override public int getItemCount() { return (null != itemsList ? itemsList.size() : 0); } public class SingleItemRowHolder extends RecyclerView.ViewHolder { protected TextView tvTitle; protected ImageView itemImage; public SingleItemRowHolder(View view) { super(view); this.tvTitle = (TextView) view.findViewById(R.id.tvTitle); this.itemImage = (ImageView) view.findViewById(R.id.itemImage); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), tvTitle.getText(), Toast.LENGTH_SHORT).show(); } }); } } } 

RecyclerViewDataAdapter.java

 import android.content.Context; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.pratap.gplaystore.R; import com.pratap.gplaystore.models.SectionDataModel; import java.util.ArrayList; public class RecyclerViewDataAdapter extends RecyclerView.Adapter { private ArrayList dataList; private Context mContext; public RecyclerViewDataAdapter(Context context, ArrayList dataList) { this.dataList = dataList; this.mContext = context; } @Override public ItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, null); ItemRowHolder mh = new ItemRowHolder(v); return mh; } @Override public void onBindViewHolder(ItemRowHolder itemRowHolder, int i) { final String sectionName = dataList.get(i).getHeaderTitle(); ArrayList singleSectionItems = dataList.get(i).getAllItemsInSection(); itemRowHolder.itemTitle.setText(sectionName); SectionListDataAdapter itemListDataAdapter = new SectionListDataAdapter(mContext, singleSectionItems); itemRowHolder.recycler_view_list.setHasFixedSize(true); itemRowHolder.recycler_view_list.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); itemRowHolder.recycler_view_list.setAdapter(itemListDataAdapter); itemRowHolder.btnMore.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), "click event on more, "+sectionName , Toast.LENGTH_SHORT).show(); } }); /* Glide.with(mContext) .load(feedItem.getImageURL()) .diskCacheStrategy(DiskCacheStrategy.ALL) .centerCrop() .error(R.drawable.bg) .into(feedListRowHolder.thumbView);*/ } @Override public int getItemCount() { return (null != dataList ? dataList.size() : 0); } public class ItemRowHolder extends RecyclerView.ViewHolder { protected TextView itemTitle; protected RecyclerView recycler_view_list; protected Button btnMore; public ItemRowHolder(View view) { super(view); this.itemTitle = (TextView) view.findViewById(R.id.itemTitle); this.recycler_view_list = (RecyclerView) view.findViewById(R.id.recycler_view_list); this.btnMore= (Button) view.findViewById(R.id.btnMore); } } } 

SingleItemModel.java

 public class SingleItemModel { private String name; private String url; private String description; public SingleItemModel() { } public SingleItemModel(String name, String url) { this.name = name; this.url = url; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } 

MainActivity.java

 import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import com.pratap.gplaystore.adapters.RecyclerViewDataAdapter; import com.pratap.gplaystore.models.SectionDataModel; import com.pratap.gplaystore.models.SingleItemModel; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private Toolbar toolbar; ArrayList allSampleData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); allSampleData = new ArrayList(); if (toolbar != null) { setSupportActionBar(toolbar); toolbar.setTitle("G PlayStore"); } createDummyData(); RecyclerView my_recycler_view = (RecyclerView) findViewById(R.id.my_recycler_view); my_recycler_view.setHasFixedSize(true); RecyclerViewDataAdapter adapter = new RecyclerViewDataAdapter(this, allSampleData); my_recycler_view.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); my_recycler_view.setAdapter(adapter); } public void createDummyData() { for (int i = 1; i <= 5; i++) { SectionDataModel dm = new SectionDataModel(); dm.setHeaderTitle("Section " + i); ArrayList singleItem = new ArrayList(); for (int j = 0; j <= 5; j++) { singleItem.add(new SingleItemModel("Item " + j, "URL " + j)); } dm.setAllItemsInSection(singleItem); allSampleData.add(dm); } } } 

activity_main.xml中

      

list_item.xml

     

list_single_card.xml

        

在AndroidManifest.xml中,您需要添加以下权限:

    

请帮忙。