![](/img/trans.png)
[英]Can I use the same adapter for two different listviews in different activities?
[英]How Can I use Same Adapter of a GridView on Different activities
假设我有两个活动,活动A和活动B。
活动A使用适配器Z显示图像列表。
当用户单击活动A中的任何图像时,它们将被带到活动B中以显示完整图像。 我正在使用Intent将图像路径和网格位置传递给Activity。
现在在活动B中,放置一个删除按钮,该按钮应该从gridview适配器中删除图像路径。
问题是:如何访问活动B中的活动A适配器以在适配器中调用remove(position)方法。
因此,我可以在活动A的onResume中调用notifyDataSetChanged来更新gridview图像。
活动A
MyGridView = (GridView) findViewById(R.id.gridview);
adapter = new MyAdapter(this);
MyGridView .setAdapter(adapter );
Intent fullImageActivity = new Intent(getApplicationContext(), ActivityB.class);
fullImageActivity.putExtra("position", position);
fullImageActivity.putExtra("path", mediaPath);
startActivity(fullImageActivity);
活动B
Intent i = getIntent();
// I'm getting position and path from setOnItemClickListener
position = i.getExtras().getInt("position");
path = i.getExtras().getString("path");
// I want to remove path from my adapter after clicking delete button in Activity B
适配器
public ArrayList<String> images;
public void remove(int position){
images.remove(position);
}
Intent fullImageActivity = new Intent(getApplicationContext(), ActivityB.class);
fullImageActivity.putExtra("position", position);
fullImageActivity.putExtra("path", mediaPath);
startActivityForResult(fullImageActivity, 2);
检查是否已删除Activity B
中特定位置的内容。 在这里我重写onBackPressed()
(Ex。)方法
public void onBackPressed(){
super.onBackPressed()
Intent intent=new Intent();
intent.putExtra("isdeleted",true);
intent.putExtra("pos",position);
setResult(2,intent);
finish();
}
在Activity A
onActivityResult
中处理它。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// check if the request code is same as what is passed here it is 2
if(requestCode==2)
{
if(data.getBooleanExtra("isdeleted")){
remove from position array and notify dataset change. // pos = data.getIntExtra("pos")
}
}
}
很抱歉TYPO。
这里的关键是您需要共享数据,而不是真正的适配器。
您可以使用单例类来保存图像数据,然后在两个活动中都访问它们。 这样可以确保两个活动之间始终保持同步。
public class ImageData{
private ArrayList<ImageModel> mDataOfImages;
private ImageData mHelperInstance;
private ImageData(){
//private constructor to ensure singleton
}
public static ImageData getInstance(){
// return an ImageData instance according to your implementation
// of singleton pattern
}
private void setData(ArrayList<ImageModel> newData){
this.mDataOfImages = newData;
}
private void removeImage(int position){
if(this.mDataOfImages !=null && this.mDataOfImages.size() > position){
mDataOfImages.remove(position);
}
}
}
private void saveImageData(ArrayList<ImageModel> data){
if(data !=null){
if(mAdapter !=null){
mAdapter.setData(data);
}
}
}
//Call notifydatasetchanged when activity is opened again
@Override
protected void onStart() {
if(mAdapter !=null){
mAdapter.notifyDataSetChanged();
}
}
public void setData(ArrayList<ImageMode> newData){
if(newData !=null){
ImageDataSingleton.getInstance().setData(newData);
notifyDataSetChanged();
}
}
使用单例类在活动B中显示图像。由于使用的是模型阵列列表,因此您可以轻松实现向右/向左滑动并删除多个图像。
//Delete a image
private void deleteImage(){
ImageDataSingleton.getInstance().removeImage(getCurrentPosition());
// Rest of deletion handling like moving to right or left image
}
我认为您应该在活动A中构建remove方法,并确保它是静态的:
public static void remove(int position){
images.remove(position);
}
现在您可以从活动B调用它,如下所示:
ActivityA.remove(position);
我认为这会起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.