问题在recyclerview中的结果

阿米尔:

我想从图库中添加图像并添加到arraylist并将其显示到recyclerview中

但无法在适配器-_-中使用onactivityresult

我使用Fishbun从库中添加图像,但是当我单击“确定”时,recyclerview中未显示图像

我在android中是新手,不知道该怎么做

这是我的MainActivity:

package com.example.myapuuuplication;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.sangcomz.fishbun.FishBun;
import com.sangcomz.fishbun.adapter.image.impl.GlideAdapter;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    Adapter adapter = new Adapter();
    List<Modell> uris = new ArrayList<>();

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

        RecyclerView rv = findViewById(R.id.rv);
        rv.setAdapter(adapter);
        rv.setLayoutManager(new LinearLayoutManager(this,RecyclerView.HORIZONTAL,false));

        Button btn = findViewById(R.id.button);
        btn
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        openpicker();

                    }
                });
    }

    private void openpicker() {
            FishBun.with(this).setImageAdapter(new GlideAdapter())
                    .setMaxCount(3)
                    .setActionBarColor(Color.parseColor("#5D4037"))
                    .startAlbum();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case FishBun.FISHBUN_REQUEST_CODE:
                if (resultCode == RESULT_OK) {
                    uris = data.getParcelableArrayListExtra(FishBun.INTENT_PATH);
                    adapter.setUris(uris);
                    break;
                }
        }
    }

}

适配器:


package com.example.myapuuuplication;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.sangcomz.fishbun.FishBun;
import java.util.ArrayList;
import java.util.List;
import static android.app.Activity.RESULT_OK;

public class Adapter extends RecyclerView.Adapter<Adapter.VH> {

    List<Modell> uris = new ArrayList<>();
    public void setUris(List<Modell> uris) {
        this.uris = uris;
    }

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

    @Override
    public void onBindViewHolder(@NonNull VH holder, int position) {
        Modell modell = uris.get(position);
        VH vh = holder;
        vh.img.setImageURI(modell.getImg());
    }

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

    public class VH extends RecyclerView.ViewHolder{
        ImageView img;
        public VH(@NonNull View itemView) {
            super(itemView);
            img = itemView.findViewById(R.id.imgmodel);
        }
    }
}

和型号:

package com.example.myapuuuplication;

import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;

public class Modell implements Parcelable {
    Uri img;

    public Modell(Uri img) {
        this.img = img;
    }

    protected Modell(Parcel in) {
        img = in.readParcelable(Uri.class.getClassLoader());
    }

    public static final Creator<Modell> CREATOR = new Creator<Modell>() {
        @Override
        public Modell createFromParcel(Parcel in) {
            return new Modell(in);
        }

        @Override
        public Modell[] newArray(int size) {
            return new Modell[size];
        }
    };

    public Uri getImg() {
        return img;
    }

    public void setImg(Uri img) {
        this.img = img;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeParcelable(img, i);
    }
}

沙鲁克·穆罕默德(Sharukh Mohammed):

您正在使用设置适配器

public void setUris(List<Modell> uris) {
        this.uris = uris;
}

但是,您还必须让回收者视图知道数据已更改。为此,您需要修改功能setUris以包括notifyDataSetChanged()

最终代码:

public void setUris(List<Modell> uris) {
        this.uris = uris;
        notifyDataSetChanged();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章