问题描述
在这里,我将图像保存在来自 Adapter(adapter for recyclerView) 类中的 arraylist(name: aaa {type-ModalClass}) throgh checkBox 中的 arraylist(name: selectedImages {type- String}) 中。
if (ck){holder.checkBox.setVisibility(View.VISIBLE);}
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (aaa.get(position).isSelected()) {
aaa.get(position).setSelected(false);
} else {
aaa.get(position).setSelected(true);
selectedImages.add(aaa.get(position).getImage().toString());
Toast.makeText(context,aaa.get(position).getImage().toString(),Toast.LENGTH_LONG).show();
}
}
});
在这里,我试图从按钮的 onClickListioner 中的数组(selectedImages)中删除图像(用于删除)
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i = 0; i<a.selectedImages.size(); i++) {
File imageFile= new File(a.selectedImages.get(i));
String pathh= imageFile.getAbsolutePath();
getContentResolver().delete(Uri.parse(pathh),null,null);
MainActivity.this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(imageFile)));
}
a.selectedImages.clear();
a.notifyDataSetChanged();
}
});
** 这里的 {a} 是适配器类之外的对象。此代码位于 Mainactivity 的 onCreate 方法中。我尝试了很多方法来解决它,但没有一个解决了我的问题。**
当我点击删除按钮时,出现以下 logcate 并且我的应用程序崩溃了。
2021-04-10 07:13:19.527 2056-2056/com.example.gallery30 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.gallery30,PID: 2056
java.lang.IllegalArgumentException: Unknown URL /file:/storage/emulated/0/Documents%20(1)/Pinkesh%20Documents/Reshan%20card2.jpg
at android.content.ContentResolver.delete(ContentResolver.java:2288)
at android.content.ContentResolver.delete(ContentResolver.java:2258)
at com.example.gallery30.MainActivity$1.onClick(MainActivity.java:76)
at android.view.View.performClick(View.java:8160)
at android.widget.TextView.performClick(TextView.java:16222)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:8137)
at android.view.View.access$3700(View.java:888)
at android.view.View$PerformClick.run(View.java:30236)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
这是我的主要活动代码
public class MainActivity extends AppCompatActivity implements OnItemClickListioner {
RecyclerView recyclerView;
String[] arrPath;
String[] permissions= {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA,Manifest.permission.INTERNET};
public Adapter a;
Button delete;
ImageView imageViewforshowimage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView= findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this,3));
a=new Adapter(MainActivity.this,getData(),this,arrPath);
recyclerView.setAdapter(a);
delete= findViewById(R.id.delete);
TextView textView= findViewById(R.id.textView2);
imageViewforshowimage= findViewById(R.id.imageView3);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i = 0; i<a.selectedImages.size(); i++) {
File imageFile= new File(a.selectedImages.get(i));
String pathh= imageFile.getAbsolutePath();
getContentResolver().delete(Uri.parse(pathh),Uri.fromFile(imageFile)));
}
a.selectedImages.clear();
a.notifyDataSetChanged();
}
});
if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,permissions,101);
}
}
@Override
public void picClick(viewHolder holder,int position,ArrayList<ModelClass> mpic) {
Intent intent= new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("p",arrPath[position]);
startActivity(intent);
}
@Override
public void picLongClick(viewHolder holder,ArrayList<ModelClass> mpic) {
Toast.makeText(MainActivity.this,"You Pressed",Toast.LENGTH_SHORT).show();
}
public ArrayList<ModelClass> getData(){
final String[] column= {MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID};
final String orderby= MediaStore.Images.Media._ID;
ArrayList<ModelClass> xMan= new ArrayList<>();
Cursor cursor= getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,column,orderby);
int count= cursor.getCount();
arrPath= new String[count];
for(int i= 0;i<count;i++){
ModelClass modelClass= new ModelClass();
cursor.moveToPosition(i);
int datacolumnindex= cursor.getColumnIndex(MediaStore.Images.Media.DATA);
arrPath[i]= cursor.getString(datacolumnindex);
File file= new File(arrPath[i]);
modelClass.setName(file.getName());
modelClass.setImagepath(file.getPath());
modelClass.setImage(Uri.fromFile(file));
xMan.add(modelClass);
}
return xMan;
}
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode,grantResults);
if(requestCode==101){
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
}
}
}
}
这是我的 recyclerView 适配器
public class Adapter extends RecyclerView.Adapter<viewHolder> {
public ArrayList<ModelClass> aaa=new ArrayList<>();
public Context context;
public Boolean ck=false;
public ArrayList<String> selectedImages= new ArrayList<>();
public ArrayList<CheckBox> checkmate= new ArrayList<>();
private final OnItemClickListioner picListerner;
public String[] arraypathadapter;
public String checkedstring;
private OnItemCheckListener onItemClick;
interface OnItemCheckListener {
void onItemCheck(ClipData.Item item);
void onItemUncheck(ClipData.Item item);
}
public Adapter(Context c,ArrayList<ModelClass> aaa,OnItemClickListioner picListerner,String[] arraypathadapter) {
this.aaa = aaa;
this.context= c;
this.picListerner = picListerner;
this.arraypathadapter= arraypathadapter;
}
@NonNull
@Override
public viewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.single_cell,false);
return new viewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull viewHolder holder,int position) {
ModelClass m = aaa.get(position);
holder.textView.setText(m.getname());
holder.checkBox.setChecked(aaa.get(position).isSelected());
Glide.with(context).load(m.getImage()).placeholder(R.drawable.placeholder_image).into(holder.imageView);
if (ck){holder.checkBox.setVisibility(View.VISIBLE);}
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (aaa.get(position).isSelected()) {
aaa.get(position).setSelected(false);
} else {
aaa.get(position).setSelected(true);
selectedImages.add(aaa.get(position).getImage().toString());
Toast.makeText(context,Toast.LENGTH_LONG).show();
}
}
});
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
picListerner.picClick(holder,position,aaa);
}
});
holder.imageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
picListerner.picLongClick(holder,aaa);
ck = true;
notifyDataSetChanged();
return true;
}
});
}
@Override
public int getItemCount () {
return aaa.size();
}}
这是我的界面 (OnItemClickListener)
public interface OnItemClickListioner {
public void picClick(viewHolder holder,ArrayList<ModelClass> mpic);
public void picLongClick(viewHolder holder,ArrayList<ModelClass> mpic);
}
这是我的 ModalClass
public class ModelClass {
private String name;
private Uri image;
private CheckBox checkBox;
private String imagepath;
private boolean isSelected;
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
public String getImagepath() {
return imagepath;
}
public void setImagepath(String imagepath) {
this.imagepath = imagepath;
}
public CheckBox getCheckBox() {
return checkBox;
}
public void setCheckBox(CheckBox checkBox) {
this.checkBox = checkBox;
}
public String getname() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Uri getImage() {
return image;
}
public void setImage(Uri image) {
this.image = image;
}}
** MainActivity2 用于在单击 recyclerView 中的图像缩略图时显示大图像...提前感谢您的帮助。我不仅是 android 的实习生,也是编程的实习生。**
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)