gpt4 book ai didi

android - 如何从 Android 中的自定义 Gallery View 调用主 Activity 类中的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:44 25 4
gpt4 key购买 nike

我有一个自定义画廊 View ,我在其中重写了一些方法。我希望能够从此类中调用我的主要 Activity 中的函数。如何引用回我的主类?

我想我只是通过创建一个 setter 函数将类引用推送到 CustomGallery ---> g.setBaseClass(this);

CustomGallery g = (CustomGallery) findViewById(R.id.playSelectionGallery);
g.setSpacing(10);
g.setCallbackDuringFling(false);
g.setAdapter(new ImageAdapter(this));
g.setSelection(1);
registerForContextMenu(g);
g.setBaseClass(this);

问题是 thisContext 类型,someFunctionToCall() 将导致不是此类错误的成员。在我的自定义类(class)中,我有:

public void setBaseClass(Context baseClass)
{
_baseClass = baseClass;
}
private void callSomeFuntionOnMyMainActivityClass()
{
_baseClass.someFunctionToCall();
}

我想要做的就是回调我的主类,名为 ViewFlipperDemo。这在 As3 中很容易。有什么想法吗?希望我遗漏了一些非常简单的东西。

最佳答案

这实际上不是一个好主意......但你可以这样做:

private void callSomeFuntionOnMyMainActivityClass()
{
((ViewFlipperDemo)_baseClass).someFunctionToCall();
}

您应该做的是实现一个简单的观察器,它允许您通知 Activity 发生了某些事情。这是主要的 OO 原则之一,您的自定义类不应该知道您的 Activity 类的任何信息。

观察者模式示例

观察者界面:

// TheObserver.java
public interface TheObserver{
void callback();
}

您的自定义 View :

public class CustomGallery{
private TheObserver mObserver;

// the rest of your class

// this is to set the observer
public void setObserver(TheObserver observer){
mObserver = observer;
}

// here be the magic
private void callSomeFuntionOnMyMainActivityClass(){
if( mObserver != null ){
mObserver.callback();
}
}
// actually, callSomeFuntionOnMyMainActivityClass
// is not a good name... but it will work for the example

}

这是对观察者有益的 Activity (请注意,现在您可以在不同的 Activity 上使用您的自定义 View ,而不仅仅是一个 Activity ,这是以这种方式实现它的关键原因之一):

public class YourActivity extends Activity{
// your normal stuff bla blah

public void someMethod(){
CustomGallery g=(CustomGallery)findViewById(R.id.playSelectionGallery);
g.setObserver(new TheObserver(){
public void callback(){
// here you call something inside your activity, for instance
methodOnYourActivity();
}
});
}
}

你会注意到这种设计模式(观察者)在 Java 和 Android 中被广泛使用......几乎所有类型的 UI 事件都是使用观察者(OnClickListener, OnKeyListener 等)。顺便说一句,我没有测试代码,但它应该可以工作。

关于android - 如何从 Android 中的自定义 Gallery View 调用主 Activity 类中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4456643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com