【问题标题】:Loading images into a recycleview from a set folder将图像从设置的文件夹加载到回收视图中
【发布时间】:2015-05-23 08:34:20
【问题描述】:

我正在使用 Recyclerview 并想在其中添加图像,效果很好。我想在我的资源文件夹中使用可绘制的 int 数组,并从我的 sdcard 上的设置文件夹中加载图像。我有一个字符串数组,它列出了所有图像的路径并在我的卡片视图中设置了一个文本视图,但我无法将其转换为一个 int 数组来加载图像。

这是我的代码,我已经注释掉了加载硬编码的 drawable.resources 和 textviews 的字符串数组和 int 数组。

如果您需要更多信息/代码,我可以发布。提前致谢。

feed.setMyFiles(previewsPath [i]);工作正常。

feed.setThumbnail(intarray[i]);是我卡住的地方。

MainActivity

public class MainCardActivity extends ActionBarActivity {

 private RecyclerView recyclerView;
 private CardView cardView;

 private ArrayList<FeedProperties> os_versions;
 private RecyclerView.Adapter mAdapter;
// private RecyclerView.LayoutManager mLayoutManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.maincardlayout);
    initContrls();
}

private void initContrls() {

    //cardView = (CardView) findViewById(R.id.cardList);

    recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

   // final String[] versions = {"Synergy", "Synergy", "Synergy", "Synergy", "Synergy", "Synergy", "Synergy"};
   // final int[] previewsImages = {R.drawable.psss, R.drawable.psss, R.drawable.psss, R.drawable.psss, R.drawable.sss, R.drawable.dog, R.drawable.sss, R.drawable.psss, R.drawable.dog, R.drawable.dog, R.drawable.sss, R.drawable.psss};


    // Check for count
    os_versions = new ArrayList<FeedProperties>();

    File pathToFiles = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Overlays/Previews");

    String[] previewsPath = pathToFiles.list();

    //ArrayList<String> filePaths;
    //populate filePaths with your list of file paths.
    //feed.setThumbnail(Drawable.createFromPath(filePaths.get(i)));

    //int intarray[] = new int[previewsPath.length];


   // for (int i = 0; i < previewsPath.length; i++) {
       // FeedProperties feed = new FeedProperties();
        ArrayList<String> filePaths = new ArrayList<>();
        for (String s : pathToFiles.list()) {
            filePaths.add(s); }
        for (int i = 0; i < previewsPath.length; i++) {
            FeedProperties feed = new FeedProperties();
            feed.setThumbnail(Drawable.createFromPath(filePaths.get(i)));
            feed.setMyFiles(previewsPath [i]);

        //feed.setMyFiles(previewsPath [i]);
       // intarray[i] = Integer.parseInt(previewsPath[i]);
       // feed.setThumbnail(intarray[i]);
        os_versions.add(feed);
    }

    recyclerView.setHasFixedSize(true);

    // ListView
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    //Grid View
    // recyclerView.setLayoutManager(new GridLayoutManager(this,2,1,false));

    //StaggeredGridView
    // recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,1));

    mAdapter = new CardViewDataAdapter(os_versions);       
    recyclerView.setAdapter(mAdapter);
  }
}

模型类

public class FeedProperties {

 private String title;
 private String myfiles;
 private int thumbnail;

 public String getTitle() {
    return title;
 }

 public String getMyFiles() {
    return myfiles;
 }

 public void setMyFiles(String myfiles) {
    this.myfiles = myfiles;
 }

 public void setTitle(String title) {
    this.title = title;
 }

 public int getThumbnail() {
    return thumbnail;
 }

 public void setThumbnail(int thumbnail) {
    this.thumbnail = thumbnail;
 }
}

适配器类

public class CardViewDataAdapter extends RecyclerView.Adapter<CardViewDataAdapter.ViewHolder> {

 private static ArrayList<FeedProperties> dataSet;

 public CardViewDataAdapter(ArrayList<FeedProperties> os_versions) {
    dataSet = os_versions;
 }

 @Override
 public CardViewDataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    //create a new view
     View itemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(
            R.layout.card_view, null);

    //create ViewHolder
     ViewHolder viewHolder = new ViewHolder(itemLayoutView);
     return viewHolder;
  }

 @Override
 public void onBindViewHolder(CardViewDataAdapter.ViewHolder viewHolder, int i) {

    FeedProperties fp = dataSet.get(i);

    viewHolder.tvVersionName.setText(fp.getTitle());
    viewHolder.tvmyfilesName.setText(fp.getMyFiles());
    viewHolder.iconView.setImageResource(fp.getThumbnail());
    viewHolder.feed = fp;
 }

 @Override
 public int getItemCount() {
    return dataSet.size();
 }

 @Override
 public long getItemId(int position) {
    return position;
 }

 // inner class to hold a reference to each item of RecyclerView
 public static class ViewHolder extends RecyclerView.ViewHolder {

    public TextView tvVersionName;
    public TextView tvmyfilesName;
    public ImageView iconView;

    public FeedProperties feed;

    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);

        tvVersionName = (TextView) itemLayoutView.findViewById(R.id.tvVersionName);
        tvmyfilesName = (TextView) itemLayoutView.findViewById(R.id.tvmyfilesName);
        iconView = (ImageView) itemLayoutView.findViewById(R.id.iconId);

        itemLayoutView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(v.getContext(), SecondPage.class);
                v.getContext().startActivity(intent);
                Toast.makeText(v.getContext(), "os version is: " + feed.getTitle(), Toast.LENGTH_SHORT).show();
            }
        });
     }
   }
}

      ArrayList<String> filePaths = new ArrayList<>();
        for (String s : pathToFiles.list()) {
            filePaths.add(s);
        }
        for (int i = 0; i < previewsPath.length; i++) {
            FeedProperties feed = new FeedProperties();
            feed.setThumbnail(Drawable.createFromPath(filePaths.get(i)));
            feed.setMyFiles(previewsPath [i]);

        //feed.setMyFiles(previewsPath [i]);
        //intarray[i] = Integer.parseInt(previewsPath[i]);
        //feed.setThumbnail(intarray[i]);
        os_versions.add(feed);
        } 

【问题讨论】:

  • 试试这样的... ArrayList filePaths; //用您的文件路径列表填充文件路径。 feed.setThumbnail(Drawable.createFromPath(filePaths.get(i)));
  • for (int i = 0; i 文件路径; feed.setThumbnail(Drawable.createFromPath(filePaths.get(i))); feed.setMyFiles(previewsPath [i]); // intarray[i] = Integer.parseInt(previewsPath[i]); // feed.setThumbnail(intarray[i]); os_versions.add(feed);
  • 更多类似... ArrayList filePaths = new ArrayList(); for (String s : pathToFiles.list()) { filePaths.add(s); } for (int i = 0; i
  • 好的,现在试试。谢谢
  • 好的,我试过了,见上文。我还添加了我的 FeedProperties.class,因为它现在显示了这一点。 FeedProperties 中的 setThumbnail(int) 不能应用于 android.graphics.drawable.Drawables

标签: android arrays image android-recyclerview


【解决方案1】:

您是否尝试过使用毕加索图书馆?这是一个教程http://www.101apps.co.za/index.php/articles/using-bitmaps-efficiently.html。本教程中还有一个链接展示了如何使用 picasso 和 recyclerview。这是毕加索网页http://square.github.io/picasso/的链接。祝你好运

【讨论】:

  • 也试过了。它是一个非常好的库,但由于教程代码链接已失效,我找不到有关如何执行此操作的工作示例。并且您发布的链接实际上并没有从 sdcard 中获取图像,它们使用来自您的资源的 .drawables 字符串数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2012-11-15
相关资源
最近更新 更多