Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不同的活动上使用相同的GridView适配器_Java_Android_Xml_Gridview - Fatal编程技术网

Java 如何在不同的活动上使用相同的GridView适配器

Java 如何在不同的活动上使用相同的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 =

假设我有两个活动,活动A和活动B

活动A显示使用适配器Z的图像列表

当用户单击活动A中的任何图像时,他们将被带到活动B以显示完整图像。我使用Intent将图像路径和网格位置传递给活动

现在在活动B中,我放置了一个删除按钮,该按钮应该从gridview适配器中删除imagepath

问题是: 如何访问活动B中的活动A适配器以调用适配器中的移除(位置)方法

因此,我可以在活动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);
        }
公共阵列列表图像;
公共无效删除(内部位置){
图像。删除(位置);
}

我认为您应该在活动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
}