Java 如何在不同的活动上使用相同的GridView适配器
假设我有两个活动,活动A和活动B 活动A显示使用适配器Z的图像列表 当用户单击活动A中的任何图像时,他们将被带到活动B以显示完整图像。我使用Intent将图像路径和网格位置传递给活动 现在在活动B中,我放置了一个删除按钮,该按钮应该从gridview适配器中删除imagepath 问题是: 如何访问活动B中的活动A适配器以调用适配器中的移除(位置)方法 因此,我可以在活动A的onResume中调用notifyDataSetChanged来更新gridview图像 活动AJava 如何在不同的活动上使用相同的GridView适配器,java,android,xml,gridview,Java,Android,Xml,Gridview,假设我有两个活动,活动A和活动B 活动A显示使用适配器Z的图像列表 当用户单击活动A中的任何图像时,他们将被带到活动B以显示完整图像。我使用Intent将图像路径和网格位置传递给活动 现在在活动B中,我放置了一个删除按钮,该按钮应该从gridview适配器中删除imagepath 问题是: 如何访问活动B中的活动A适配器以调用适配器中的移除(位置)方法 因此,我可以在活动A的onResume中调用notifyDataSetChanged来更新gridview图像 活动A MyGridView =
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);
}
公共阵列列表图像;
公共无效删除(内部位置){
图像。删除(位置);
}
我认为您应该在活动A中构建删除方法,并确保它是静态的:
public static void remove(int position){
images.remove(position);
}
现在您可以从活动B中调用它,如下所示:
ActivityA.remove(position);
我认为这会起作用。我认为您应该在活动A中构建删除方法,并确保它是静态的:
public static void remove(int position){
images.remove(position);
}
现在您可以从活动B中调用它,如下所示:
ActivityA.remove(position);
我想这会有用的。使用
检查是否在活动B中的特定位置删除。这里我重写了onBackPressed()
(例如)方法
在活动A的活动结果中处理它
@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")
}
}
}
抱歉输入错误。请使用
检查是否在活动B中的特定位置删除。这里我重写了onBackPressed()
(例如)方法
在活动A的活动结果中处理它
@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")
}
}
}
很抱歉输入错误。这里的关键是您需要共享数据,而不是真正的适配器
使用单例
可以使用单例类保存图像数据,然后在两个活动中访问相同的图像数据。这确保了两个活动之间始终保持同步
独生子女班
这里的关键是您需要共享数据,而不是真正的适配器
使用单例
可以使用单例类保存图像数据,然后在两个活动中访问相同的图像数据。这确保了两个活动之间始终保持同步
独生子女班
使用静态变量或共享pref在活动B中保存您的位置。在活动A中,从arraylist中删除位置并通知它是的,我知道这样做。但是我想从活动B本身删除位置。活动B中有gridview吗?没有,活动B只有一个ImageView来显示在活动A上单击的图像使用静态变量或共享pref保存您在活动B中的位置。在活动A中,从arraylist中删除位置并通知它是的,我知道这样做。但是我想从活动B本身中删除位置。您在活动B中有gridview吗?不,活动B只有一个ImageView来显示在活动a上单击的图像,但“无法从静态上下文引用非静态方法”,但在上面,我建议您将方法设为静态:'public static void remove(int position)'请发送您的完整代码。也许我可以帮助您。不起作用,“非静态方法无法从静态上下文引用”,但在上面,我建议您将方法设置为静态:“public static void remove(int position)”。请发送您的完整代码。也许我能帮你,我已经试过了。但问题是,用户可以在活动B中向左/向右滑动图像以查看更多图像。因此,他们可以在返回活动A之前删除多个图像。这就是我试图删除活动B中位置的原因。因此,传递数组列表或传递位置(以逗号分隔)并在活动上。结果从按逗号拆分的字符串创建数组。即使用户单击操作栏中的“上一步”按钮,它也可以工作吗?为此,您必须调用您的图标单击事件。基本上它是主页点击不知道为什么,上一个活动的结果是不会触发时,返回按。我已经试过了。但问题是,用户可以在活动B中向左/向右滑动图像以查看更多图像。因此,他们可以在返回活动A之前删除多个图像。这就是我试图删除活动B中位置的原因。因此,传递数组列表或传递位置(以逗号分隔)并在活动上。结果从按逗号拆分的字符串创建数组。即使用户单击操作栏中的“上一步”按钮,它也可以工作吗?为此,您必须调用您的图标单击事件。基本上它是主页点击不知道为什么,上一个活动的结果是不会触发时,返回按。它正在召唤你
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();
}
}
//Delete a image
private void deleteImage(){
ImageDataSingleton.getInstance().removeImage(getCurrentPosition());
// Rest of deletion handling like moving to right or left image
}