【问题标题】:How to show app default image and user selected image at a same time in recyclerView如何在 recyclerView 中同时显示应用默认图像和用户选择的图像
【发布时间】:2021-12-26 15:15:05
【问题描述】:

我正在使用 SQLITE 创建一个联系人应用程序。如果有人要存储联系人,他会填写姓名、号码和人像。如果他没有选择图像,应用程序将设置默认图像。 但是我如何显示这两种类型的图片,我的意思是选择图片和默认图片,因为我的应用只显示默认图片。

数据库

`公共类 DatabaseHelper 扩展 SQLiteOpenHelper {

final static String DB_NAME = "contactList.db", TABLE_NAME = "contactDetails";
final static int VERSION = 1;

public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, VERSION);
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    sqLiteDatabase.execSQL("create table contactDetails " +
            "(id integer primary key autoincrement, " +
            "defaultIMG int, " +
            "uploadIMG text, " +
            "name text, " +
            "number text)"
    );
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

}




public ArrayList<ImageNameNumberModel> getContacts() {
    SQLiteDatabase db = this.getReadableDatabase();
    ArrayList<ImageNameNumberModel> contacts = new ArrayList<>();

    Cursor cursor = db.rawQuery("SELECT * FROM contactDetails", null);

    if (cursor.moveToFirst()) {
        while (cursor.moveToNext()) {
            int id = cursor.getInt(0);
            int defIMG = cursor.getInt(1);
            String upIMG = cursor.getString(2);
            String name = cursor.getString(3);
            String number = cursor.getString(4);

            ImageNameNumberModel model = new ImageNameNumberModel(id, defIMG,
                    Uri.parse(upIMG), name, number);
            contacts.add(model);
        }
    }


    return contacts;
}


public void insert(int defaultIMG, Uri uploadIMG, String name, String number) {

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("defaultIMG", defaultIMG);
    contentValues.put("uploadIMG", String.valueOf(uploadIMG));
    contentValues.put("name", name);
    contentValues.put("number", number);

    db.insert(TABLE_NAME, null, contentValues);
}

} `

RecyclerView

公共类 ImageNameNumberAdapter 扩展 RecyclerView.Adapter{

Context context;
ArrayList<ImageNameNumberModel> imageNameNumberModels;

public ImageNameNumberAdapter(Context context, ArrayList<ImageNameNumberModel> imageNameNumberModels) {
    this.context = context;
    this.imageNameNumberModels = imageNameNumberModels;
}

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

@Override
public void onBindViewHolder(@NonNull ImageNameNumberAdapter.viewHolder holder, int position) {
    ImageNameNumberModel inm = imageNameNumberModels.get(position);


    //Help here 


    holder.userName.setText(inm.getName());
    holder.userNumber.setText(inm.getNumber());
}

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

public class viewHolder extends RecyclerView.ViewHolder {
    ImageView userIMG;
    TextView userName, userNumber;
    public viewHolder(@NonNull View itemView) {
        super(itemView);
        userIMG = itemView.findViewById(R.id.imageSampleContact);
        userName = itemView.findViewById(R.id.nameSampleContact);
        userNumber = itemView.findViewById(R.id.numberSampleContact);
    }
}

}

AddContactActivity.java

公共类 AddContact 扩展 AppCompatActivity {

ActivityAddContactBinding binding;
Uri uploadIMG = null;
public static boolean UPLOAD = false;
public static int DEFAULT_IMG = R.drawable.noimgae;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityAddContactBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    addImage();
    saveContact();
}


private void saveContact() {
    binding.contactSaveButtonAddContactActivity.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(AddContact.this, MainActivity.class);
            DatabaseHelper dbh = new DatabaseHelper(AddContact.this);
            if (UPLOAD) {
                DEFAULT_IMG = 0;
                dbh.insert(DEFAULT_IMG, uploadIMG, binding.contactNameAddContactActivity.getText().toString(), binding.contactPhoneNumberAddContactActivity.getText().toString());
                DEFAULT_IMG = R.drawable.noimgae;
                UPLOAD = false;
            }
            else {
                dbh.insert(DEFAULT_IMG, uploadIMG, binding.contactNameAddContactActivity.getText().toString(), binding.contactPhoneNumberAddContactActivity.getText().toString());
            }
            startActivity(intent);
            finish();
        }
    });
}


private void addImage() {
    binding.contactImageAddContactActivity.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            ImagePicker.with(AddContact.this)
                    .galleryOnly()
                    .crop()
                    .compress(1024)
                    .maxResultSize(1080, 1080)
                    .start();

        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        uploadIMG = data.getData();
        UPLOAD = true;
        binding.contactImageAddContactActivity.setImageURI(uploadIMG);
    }
}

}

【问题讨论】:

    标签: android android-recyclerview android-sqlite


    【解决方案1】:

    您需要做的就是检查 ImageNameNumberModel 是否包含 uploadImage 路径。如果它已从磁盘加载选定的图像,则从资源中加载默认图像。

    对于 Android 中的图像加载,您可以使用任何常见的图像处理库,例如 GlidePicasso

    【讨论】:

    • 你能告诉我如何检查 ImageNameNumberModel 是否包含 uploadImage 路径吗?
    【解决方案2】:

    这样检查

     If(!ImageNameNumberModel[position].uploadImage.isNullOrEmpty() $$ 
             !ImageNameNumberModel[position].uploadImage=="null"){
         
    Glide.with(context).load(ImageNameNumberModel[position].uploadImage).into(imageView)
    
    }else{
       imageView.setBackgroundResource(R.drawable.image)
    }
    

    注意:- 这里用户根据您的模型类和图像视图也请使用 glide 库

    基本上上面的代码会检查你的模型类是否有一个图像 URL,如果是,那么将该 URL 图像设置为你的图像视图,否则默认一个

    【讨论】:

    • 仍然没有显示
    • 你能告诉我你把这段代码放在哪里了吗?
    • onBindViewHolder() 在 recyclerView 类中
    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 2021-07-29
    • 2021-05-14
    • 1970-01-01
    • 2023-03-06
    • 2019-06-13
    • 1970-01-01
    • 2018-07-05
    相关资源
    最近更新 更多