java - 使用 Picasso 和 RecyclerAdapter 在 Activity 之间传递图像

标签 java android

我正在尝试通过 Intent 在 Activity 之间传递图像/海报。我使用过毕加索库和回收器适配器。但在获得 Intent 后,我无法在 bundle 附加中设置图像。在年份和标题之后。

  public class ShowMovieDetails extends AppCompatActivity implements OnNetworkCallHandled,RecyclerViewAdapter.OnClickListener {

    private RecyclerViewAdapter adapter;
    public RecyclerView recyclerView;
    private DataWrapper list;
    public Context context;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_movie_details);
        context=this;

        Intent intent = getIntent();

        String movieName = intent.getExtras().getString("moviename", "");
        if (movieName != null) {
            new MovieTask(movieName, this).execute();
        }
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));


    }


    @Override
    public void onNetworkcallSuccess(Object object) {

        //json to gson
        String result = (String) object;
        Gson gson = new Gson();
        list = gson.fromJson(result, DataWrapper.class);
        adapter = new RecyclerViewAdapter(list.getSearch(),this, this);
        recyclerView.setAdapter(adapter);
        System.out.print(result);
        System.out.println("On success");
    }

    @Override
    public void onNetworkcallFailure(Object object) {
        System.out.println("On failure");
    }

    @Override
    public void onClick(View view, int position, long itemId) {
        startActivity(position);
        System.out.println();
    }

    private void startActivity(int position) {
        Intent intent = new Intent(this, DetailActivity.class);
        Bundle extras = new Bundle();
        extras.putString("Title", list.getSearch().get(position).getTitle());
        extras.putString("Year", list.getSearch().get(position).getYear());
        extras.putString("Poster",list.getSearch().get(position).getPoster());
        intent.putExtras(extras);
        startActivity(intent);
    }
}

还有另一个类,我在 extras 中设置内容

  public class DetailActivity extends AppCompatActivity {
    private TextView Title;
    private TextView Year;
    private ImageView Image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        Intent intent = getIntent();
        Bundle extras = intent.getExtras();


        Title = (TextView) findViewById(R.id.Title);
        Year = (TextView) findViewById(R.id.Year);
        Image = (ImageView) findViewById(R.id.iVPoster);


        if (intent != null) {
            String title = extras.getString("Title");
            String year=extras.getString("Year");
            String image=extras.getString("Poster");
            Title.setText(title);
            Year.setText(year);



            System.out.println();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }


}

我的回收适配器

    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MovieDetailsHolder> {

    private ArrayList<MovieDetails> movieDetails;
    private Context context;
    private OnClickListener onClick;

    RecyclerViewAdapter(ArrayList<MovieDetails> movieDetails, Context context, OnClickListener onClick) {
        this.onClick = onClick;
        this.movieDetails = movieDetails;
        this.context = context;
    }

    @Override
    public MovieDetailsHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false);
        return new MovieDetailsHolder(view);
    }

    @Override
    public void onBindViewHolder(MovieDetailsHolder holder, final int position) {
        holder.tVMovieName.setText(movieDetails.get(position).getTitle());
        Picasso
                .with(context)
                .load(movieDetails.get(position).getPoster())
                .into(holder.iVPoster);

        holder.setOnClickListener(onClick);
    }

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

    public static class MovieDetailsHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        private OnClickListener onClickListener;

        CardView cv;
        TextView tVMovieName;
        ImageView iVPoster;

        MovieDetailsHolder(View itemView) {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.cardView);
            tVMovieName = (TextView) itemView.findViewById(R.id.tVMovieName);
            iVPoster = (ImageView) itemView.findViewById(R.id.iVPoster);

            itemView.setOnClickListener(this);
        }

        public void setOnClickListener(OnClickListener onClickListener) {
            this.onClickListener = onClickListener;
        }

        @Override
        public void onClick(View v) {
            onClickListener.onClick(v, getPosition(), getItemId());
        }
    }

    public interface OnClickListener {
        public void onClick(View view, int position, long itemId);
    }
}

最佳答案

在你的startActivity()函数中,就像你得到标题、年份和海报一样;还可以获取图像的 url。

This answer will help you.

关于java - 使用 Picasso 和 RecyclerAdapter 在 Activity 之间传递图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36968550/

相关文章:

java - Spring Boot通过MessageConverters序列化Instant

java - JPA 将简单的 String 对象映射到 Oracle Date 类型?

Android Firebase 只更新部分字段

java - Jboss 为 ServletActionContext 类抛出 ClassNotFoundExpection?

java - 为什么java不支持多重继承

java - 当我单击“计算”按钮以显示我的结果时应用程序崩溃

Android:无法导出应用程序,错误为 -1073741819

java - 创建用于使用 maven 构建的 Apklib

java - 在 eclipse 中从 WSDL 生成 XSD

android - 为什么我的 config.xml 文件似乎没有被 Cordova 3.0.9 CLI 正确更新,我应该自己手动更新它们吗?