Android 从适配器内部调用活动方法?

Android 从适配器内部调用活动方法?,android,Android,我有一个自定义适配器,它在ListView映像上有一个单击侦听器 此代码位于适配器GetView中: holder.iconImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //code to do stuff when the image is clicked } listview中的“

我有一个自定义适配器,它在ListView映像上有一个单击侦听器

此代码位于适配器GetView中:

holder.iconImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

          //code to do stuff when the image is clicked
}
listview中的“我的图像”由表示文件夹的文件夹图像和实际图像组成

因此,如果用户单击文件夹图像,我希望能够在ActivityA中调用名为moveDownFolder的方法

我不确定这是否可以在适配器内部完成

[编辑]基本上在ActivityA中,我在自定义ListView上有一个单击侦听器,因此如果他们单击自定义ListView中的文本,它会向下移动一个文件夹(如果是文件夹)


但是他们可以在ListView中单击一个图像,它会在一个新的活动中打开该图像。但是,如果他们单击listview中的文件夹图标(当然是ImageView中的图像),我希望代码向下移动文件夹,而不是试图打开图像。

我建议使用界面作为侦听器

例如:

1、创建您的界面:

public interface MyListener {

void folderClicked();
}
2、让您的ActivityA实现如下界面:

public class ActivityA extends Activity implements MyListener 
@Override
protected void folderClicked() {
  // Do your stuff here.

}
MyAdpater adapter = new MyAdpater(ActivityA.this);
3,您必须自动覆盖方法文件夹单击它将如下所示:

public class ActivityA extends Activity implements MyListener 
@Override
protected void folderClicked() {
  // Do your stuff here.

}
MyAdpater adapter = new MyAdpater(ActivityA.this);
4、将活动侦听器发送到具有构造函数的适配器,如下所示:

public class ActivityA extends Activity implements MyListener 
@Override
protected void folderClicked() {
  // Do your stuff here.

}
MyAdpater adapter = new MyAdpater(ActivityA.this);
5、在适配器类中,您的代码应如下所示:

public class TimeLineAdapter extends BaseAdapter {

private MyListener mListener;


public TimeLineAdapter(MyListener listener) {
    super();

    mListener = listener;


}

holder.iconImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         mListener.onFolderClicked()
      //code to do stuff when the image is clicked
 }

我建议使用接口作为侦听器

例如:

1、创建您的界面:

public interface MyListener {

void folderClicked();
}
2、让您的ActivityA实现如下界面:

public class ActivityA extends Activity implements MyListener 
@Override
protected void folderClicked() {
  // Do your stuff here.

}
MyAdpater adapter = new MyAdpater(ActivityA.this);
3,您必须自动覆盖方法文件夹单击它将如下所示:

public class ActivityA extends Activity implements MyListener 
@Override
protected void folderClicked() {
  // Do your stuff here.

}
MyAdpater adapter = new MyAdpater(ActivityA.this);
4、将活动侦听器发送到具有构造函数的适配器,如下所示:

public class ActivityA extends Activity implements MyListener 
@Override
protected void folderClicked() {
  // Do your stuff here.

}
MyAdpater adapter = new MyAdpater(ActivityA.this);
5、在适配器类中,您的代码应如下所示:

public class TimeLineAdapter extends BaseAdapter {

private MyListener mListener;


public TimeLineAdapter(MyListener listener) {
    super();

    mListener = listener;


}

holder.iconImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         mListener.onFolderClicked()
      //code to do stuff when the image is clicked
 }

是的,这是可以做到的,只是让你的功能如下静态公共moveDownFolder。您需要确保活动已创建。要从适配器调用该函数,只需执行以下操作:YourActivity.moveDownFolder

是的,可以这样做,只需将函数设置为静态公共moveDownFolder。您需要确保活动已创建。要从适配器调用该函数,只需执行以下操作:YourActivity.moveDownFolder

如果适配器是ActivityA的内部类,请尝试:

ActivityA.this.moveDownFolder();

如果适配器是ActivityA的内部类,请尝试:

ActivityA.this.moveDownFolder();

我明白了:ActivityA不是一个封闭类我明白了:ActivityA不是一个封闭类谢谢,我试试这个。有没有简单的方法来判断用户是否点击了一个名为folder.png的文件夹图像。因此,如果他们单击文件夹,那么我可以调用movedownfolder?是的,您在适配器中使用对象吗?你总是可以得到点击的位置,然后得到文件夹详细信息的项目位置。是的,我有点击的位置,但我想知道它是否是一个被点击的文件夹。具体来说,是否有任何方法可以检查该位置的图像是否可绘制?我不确定您要求的是什么,但如果用户单击了第5行中的imageView,是否意味着他单击了文件夹图片?列表视图具有“正确”图像和文件夹图像。如果他们单击文件夹图像,我想向下移动文件夹。理想情况下,可以这样查找:images.getposition==BitmapR.drawable.dbfolder;谢谢,我试试这个。有没有简单的方法来判断用户是否点击了一个名为folder.png的文件夹图像。因此,如果他们单击文件夹,那么我可以调用movedownfolder?是的,您在适配器中使用对象吗?你总是可以得到点击的位置,然后得到文件夹详细信息的项目位置。是的,我有点击的位置,但我想知道它是否是一个被点击的文件夹。具体来说,是否有任何方法可以检查该位置的图像是否可绘制?我不确定您要求的是什么,但如果用户单击了第5行中的imageView,是否意味着他单击了文件夹图片?列表视图具有“正确”图像和文件夹图像。如果他们单击文件夹图像,我想向下移动文件夹。理想情况下,可以这样查找:images.getposition==BitmapR.drawable.dbfolder;