【问题标题】:Passing ParseFile (Image) from adapter to another activity (SOLUTION)将 ParseFile(图像)从适配器传递到另一个活动(解决方案)
【发布时间】:2020-01-01 01:50:31
【问题描述】:

我一直在尝试将图像(ParseFile 类型)从适配器传递到另一个活动。由于它是 ParseFile,因此我无法使用 (getIntent().getIntExtra("image", 0);) 之类的正常方式将图像检索到活动中。如果您能指出如何进行的正确方向,将不胜感激。谢谢。

试图从这个适配器(PostsAdapter)传递图像

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {

    final Post post = posts.get(position);
    holder.bind(post);

    final ParseFile image = post.getImage();
    holder.rlPost.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, DetailActivity.class);
            i.putExtra("image", image);
            i.putExtra("description", post.getDescription());
            context.startActivity(i);
        }
    });`

进入这个活动(DetailActivity)

public class DetailActivity extends AppCompatActivity {

ImageView ivImageD;
Post post = new Post();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);
    ivImageD = findViewById(R.id.ivImageD);
    ParseFile image = post.getImage();
    Glide.with(this).load(image.getUrl()).into(ivImageD);
}}

解决方案

我没有从 PostsAdapter 传递 Image,而是将 objectId(在 Parse 服务器上找到)作为字符串传递并使用它来检索 Image。

在 PostsAdapter 中

i.putExtra("objectId", post.getObjectId());

在DetailActivity中

String objectId = getIntent().getStringExtra("objectId");
ParseQuery<Post> query = ParseQuery.getQuery(Post.class);
    query.setCachePolicy(ParseQuery.CachePolicy.CACHE_ELSE_NETWORK); 
    query.getInBackground(objectId, new GetCallback<Post>() {
                public void done(Post item, ParseException e) {
                    if (e == null) {
                        Log.i(TAG, "Item Found");
                        image = item.getImage();
                        Glide.with(DetailActivity.this).load(image.getUrl()).into(ivImageD);
                    }
                    else{
                        Log.i(TAG, "Item not Found");
                    }
                }
            });

【问题讨论】:

    标签: android android-intent android-activity android-adapter


    【解决方案1】:

    这里的问题是你试图从你的 viewHolder 传递图像并试图在 DetailActivity 中获取 url。

    尝试替换这一行:

    i.putExtra("image", image);
    

    对此:

     i.putExtra("image", image.getUrl());
    

    在 DetailActivity 中:

    String imageUrl = getIntent().getStringExtra("image");
    Glide.with(this).load(imageUrl).into(ivImageD);
    

    【讨论】:

    • 感谢您的回复。没有 putStringExtra 这样的东西。 stackoverflow.com/questions/26399325/…
    • @biajsilwal 更改了您的代码,我不需要创建 post 对象,因为您需要的只是详细活动的 url,您可以通过上述解决方案,您只需要这两行.
    • 你说得对,兄弟。您的解决方案也有效。但应该是 getIntent.getStringExtra("image"); 而不是 i.getStringExtra("image");
    猜你喜欢
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2021-02-22
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多