我想从网格视图中删除选中的项目复选框,我应该如何做才能将其从数组列表中删除



我有一个应用程序,它显示带有复选框的图片列表的网格视图,还有一个按钮,它将从应用程序中删除选定的复选框和相关图片。我不需要从localhost服务器中删除该项,只需要从应用程序运行时中删除即可。我曾尝试将复选框选中的项目位置保存到列表中,并使用for循环将其删除,但它显示了一个不支持的OperationException。我有办法解决这个问题吗?

Adapter.java

\\

package com.example.assignment4task2;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.Image;
import android.media.ThumbnailUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebStorage;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkError;
import com.android.volley.NoConnectionError;
import com.android.volley.ParseError;
import com.android.volley.ServerError;
import com.android.volley.TimeoutError;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
public class GridAdapter extends BaseAdapter {
private Context context;
private Context viewContext;
private List<WebsiteLocation> websiteLocations;
private List<WebsiteLocation> selectedImages = new ArrayList<>();
private ImageButton button;
private ImageLoader imageLoader;
GridAdapter adapter = this;
public GridAdapter(Context context, List<WebsiteLocation> websiteLocations, ImageButton imagebutton){
this.context = context;
this.websiteLocations = websiteLocations;
this.button = imagebutton;
}
public void removeItem(WebsiteLocation position){
websiteLocations.remove(position);
notifyDataSetChanged();
}

@Override
public int getCount() {
return websiteLocations.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

viewContext = parent.getContext();
WebsiteLocation webLocation = websiteLocations.get(position);
System.out.println(webLocation);
View view = LayoutInflater.from(viewContext).inflate(R.layout.image_layout,parent,false);
ImageView imageView = view.findViewById(R.id.imageView5);
CheckBox checkBox = view.findViewById(R.id.checkBox);
ImageLoader imageLoader = Singleton.getInstance(context).getImageLoader();
imageLoader.get(webLocation.getThumbnail(), new ImageLoader.ImageListener() {
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
Bitmap bitmap = response.getBitmap();
Bitmap thumbnail_bitmap = ThumbnailUtils.extractThumbnail(bitmap,300,300);
imageView.setImageBitmap(thumbnail_bitmap);
}
@Override
public void onErrorResponse(VolleyError error) {
System.out.println(webLocation.getThumbnail());
Toast.makeText(viewContext,"Failed to load image", Toast.LENGTH_SHORT).show();
if (error instanceof TimeoutError) {
System.out.println("timeout error");
} else if (error instanceof NoConnectionError) {
System.out.println("Connection error");
} else if (error instanceof AuthFailureError) {
System.out.println("AuthFailure error");
} else if (error instanceof ServerError) {
System.out.println("Server error");
} else if (error instanceof NetworkError) {
System.out.println("Network error");
} else if (error instanceof ParseError) {
System.out.println("Parse error");
}
}
});
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkBox.isChecked()){
selectedImages.add(websiteLocations.get(position));
System.out.println(selectedImages);
}
}
});
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent  = new Intent();
intent.setClass(context, MainActivity2.class);
intent.putExtra("weblocation",webLocation);
v.getContext().startActivity(intent);
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (WebsiteLocation si: selectedImages) {
removeItem(si);
}
}
});




return view;
}

}
\

mainactivity.java

\
package com.example.assignment4task2;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageButton;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private GridView gridView;
private WebsiteLocation[] websiteLocations;
private List<WebsiteLocation> websiteLocationList;
private GridAdapter adapter;
private ImageButton imagebutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = findViewById(R.id.gridview);
imagebutton = findViewById(R.id.imageButton);
websitelocatoinsArray();
websiteLocationList = Arrays.asList(websiteLocations);
adapter = new GridAdapter(getApplicationContext(), websiteLocationList,imagebutton);
gridView.setAdapter(adapter);


}
private void websitelocatoinsArray(){
websiteLocations = new WebsiteLocation[]{
new WebsiteLocation("Germany", "http://192.168.1.100/image/germany_thumb.png","http://192.168.1.100/image/germany.png"),
new WebsiteLocation("Indonesia","http://192.168.1.100/image/indonesia_thumb.png","http://192.168.1.100/image/indonesia.png"),
new WebsiteLocation("Japan","http://192.168.1.100/image/japan_thumb.png","http://192.168.1.100/image/japan.png"),
new WebsiteLocation("Sarawak","http://192.168.1.100/image/sarawak_thumb.png","http://192.168.1.100/image/sarawak.png"),
new WebsiteLocation("Singapore","http://192.168.1.100/image/singapore_thumb.png","http://192.168.1.100/image/singapore.png"),
new WebsiteLocation("Switzerland","http://192.168.1.100/image/switzerland_thumb.png","http://192.168.1.100/image/switzerland.png")

};
}
}

\\

您可以使用room在运行时存储数据,并从room DB中检索数据。一旦这样做,您将能够创建一个方法从room数据库中删除所选项目。

最新更新