Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用毕加索从RecyclerAdapter加载图像?_Java_Android_Picasso_Android Recyclerview - Fatal编程技术网

Java 如何使用毕加索从RecyclerAdapter加载图像?

Java 如何使用毕加索从RecyclerAdapter加载图像?,java,android,picasso,android-recyclerview,Java,Android,Picasso,Android Recyclerview,我正在尝试在RecyclerAdapterPicasso.with(context.load(stringUrl.into)(ImageView)中包含的ImageView中加载缩略图图像但这需要一个上下文。从RecyclerAdapter可以获取我的应用程序主要活动的上下文吗?我是要这样做,还是应该将图像加载到其他位置 这些是我的课。当然,RecyclerAdapter不会编译,但它代表了我正在尝试做的事情 主要活动: public class MainActivity extends App

我正在尝试在RecyclerAdapter
Picasso.with(context.load(stringUrl.into)(ImageView)中包含的ImageView中加载缩略图图像但这需要一个上下文。从RecyclerAdapter可以获取我的应用程序主要活动的上下文吗?我是要这样做,还是应该将图像加载到其他位置

这些是我的课。当然,RecyclerAdapter不会编译,但它代表了我正在尝试做的事情

主要活动:

public class MainActivity extends AppCompatActivity implements MainScreenContract.View {

    ArrayList<String> list;

    // Objects for RecyclerView
    private RecyclerView recyclerView;
    private RecyclerView.Adapter recyclerAdapter;
    private RecyclerView.LayoutManager recyclerLayoutManager;

    @Inject
    MainScreenPresenter mainPresenter;

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

        Timber.plant(new Timber.DebugTree() {
            // Add the line number to the tag
            @Override
            protected String createStackElementTag(StackTraceElement element) {
                return super.createStackElementTag(element) + ':' + element.getLineNumber();
            }
        });

        // RecyclerView implementation
        recyclerView = (RecyclerView) findViewById(R.id.my_list);
        // set to true because all images will be the same size
        recyclerView.setHasFixedSize(true);

        recyclerLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(recyclerLayoutManager);


        DaggerMainScreenComponent.builder()
                .netComponent(((App) getApplicationContext()).getNetComponent())
                .mainScreenModule(new MainScreenModule(this))
                .build().inject(this);

        //Call the method in MainPresenter to make Network Request
        mainPresenter.loadVideo();
    }

    @Override
    public void showVideos(Video video){
        // Loop through the posts, get the title of the post, and add it to our list object
        // TODO: Simplify these references with a variable?
        for(int i = 0; i < video.getResults().size(); i++){
            // TODO: add second for loop, or simplyfy and get rid of Video object
            list.add(video.getResults().get(i).getSiteDetailUrl());
            //list.add(video.get(i).getSiteDetailUrl());
            Timber.d("List item " + i + " = " + list.get(i));
        }

        // RecyclerView implementation
        recyclerAdapter = new MainScreenRecyclerAdapter(list);
        recyclerView.setAdapter(recyclerAdapter);
    }

    @Override
    public void showError(String message){
        // Show error message text as a Toast message
        Toast.makeText(getApplicationContext(), "Error" + message, Toast.LENGTH_SHORT).show();
        Timber.e("Error: " + message);
    }

    @Override
    public void showComplete(){
        // Show completed Toast message
        Toast.makeText(getApplicationContext(), "Complete", Toast.LENGTH_SHORT).show();
    }
}
公共类MainActivity扩展AppCompatActivity实现MainScreenContract。查看{
数组列表;
//用于RecyclerView的对象
私人回收站;
专用回收器查看适配器回收器适配器;
private RecyclerView.LayoutManager recyclerLayoutManager;
@注入
主屏幕演示者主演示者;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
木材.植物(新木材.树木){
//将行号添加到标记中
@凌驾
受保护字符串createStackElementTag(StackTraceElement元素){
返回super.createStackElementTag(element)+':'+element.getLineNumber();
}
});
//RecyclerView实现
recyclerView=(recyclerView)findViewById(R.id.my_列表);
//设置为true,因为所有图像的大小都相同
recyclerView.setHasFixedSize(true);
recyclerLayoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(recyclerLayoutManager);
DaggerMainScreenComponent.builder()
.netComponent(((应用程序)getApplicationContext()).getNetComponent()
.mainScreenModule(新的mainScreenModule(本))
.build().inject(这个);
//调用MainPresenter中的方法以发出网络请求
mainPresenter.loadVideo();
}
@凌驾
公共视频(视频){
//循环浏览帖子,获取帖子的标题,并将其添加到列表对象中
//TODO:使用变量简化这些引用?
对于(int i=0;i
回收器适配器:

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

    private List<String> dataset;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public ImageView imageView;
        public ViewHolder(ImageView v) {
            super(v);
            imageView = v;
        }
    }

    // TODO: Should I make the list contain Video/Result objects and pull the data from that?
    public MainScreenRecyclerAdapter(List<String> dataset) {
        dataset = dataset;
    }

    // Create new views
    @Override
    public MainScreenRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        // create a new view
        ImageView v = (ImageView) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.thumbnail_view, parent, false);

        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // - get element from dataset at this position
        // - replace the contents of hte view with that element
        // TODO: Call to picasso to load image into holder.imageView

        String imageUrl = dataset.get(position);
        Timber.d("Image URL: " + imageUrl);

        ImageView view = holder.imageView;

        Picasso.with(MainActivity.context).load(imageUrl).into(view);
    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return dataset.size();
    }
}
public类MainScreenRecyclerAdapter扩展了RecyclerView.Adapter{
私有列表数据集;
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
公共影像视图;
公共视图持有者(图像视图v){
超级(五);
imageView=v;
}
}
//TODO:我应该让列表包含视频/结果对象并从中提取数据吗?
公共主屏幕回收器适配器(列表数据集){
数据集=数据集;
}
//创建新视图
@凌驾
public MainScreen RecyclerAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
//创建新视图
ImageView v=(ImageView)LayoutFlater.from(parent.getContext())
.充气(R.layout.U视图,父视图,假);
视窗支架vh=新视窗支架(v);
返回vh;
}
//替换视图的内容(由布局管理器调用)
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
//-从此位置从数据集获取元素
//-用该元素替换hte视图的内容
//TODO:调用毕加索将图像加载到holder.imageView
字符串imageUrl=dataset.get(位置);
d.(“图像URL:+imageUrl”);
ImageView=holder.ImageView;
毕加索.with(MainActivity.context).load(imageUrl).into(视图);
}
//返回数据集的大小(由布局管理器调用)
@凌驾
public int getItemCount(){
返回dataset.size();
}
}

谢谢

您需要将上下文作为构造函数参数传递,然后使用此上下文

private Context mContext;
public MainScreenRecyclerAdapter (Context context) {
    mContext = context;
}


@Override 
    public void onBindViewHolder(ViewHolder holder, int position) {    
        String imageUrl = dataset.get(position);
        Timber.d("Image URL: " + imageUrl);

        ImageView view = holder.imageView;

        Picasso.with(MainActivity.context).load(imageUrl).into(view);
    } 

该死,这很明显。。。非常感谢。尽管现在我从RecyclerView收到了一条“未连接适配器;跳过布局”的错误消息。如果答案解决了你的问题,别忘了把它标记为已接受。