gpt4 book ai didi

Android 并使 `this` 成为其按钮之一的监听器

转载 作者:太空狗 更新时间:2023-10-29 13:39:46 25 4
gpt4 key购买 nike

我有一个从 my_view.xml 扩展而来的自定义 View MyView(具有相应的 Java 类 MyView.java)。

我覆盖 MyView(Context context, AttributeSet attrs) 以将 subview 连接到类的成员。

现在,这些 subview 之一是一个 Button,我希望我的 View 在将此事件传递给委托(delegate)之前监听对其按钮的点击。但是,如果我声明

this.myButton.setOnClickListener(this);

在构造函数 MyView(Context context, AttributeSet attrs) 中(其中 thisMyView 的一个实例)我得到一个 空指针异常

MyClass.java 中哪里是调用this.myButton.setOnClickListener(this); 的合适位置?

%%

编辑。一些代码:

public MyView(Context ctx, AttributeSet attrs)
{
super(context, attrs);
this.myButton = (Button) this.findViewById(R.id.my_button);
this.myButton.setOnClickListener(this); // Raises null pointer;'id' is correct.
}

最佳答案

与其尝试在构造函数中执行 setOnClickListener(this) 调用,不如在按钮完全初始化后执行此操作。尝试移动 setOnClickListener(this) 以便从父 Activity 的 onResume 方法(间接)调用它,如下所示:

public class MainMenuActivity extends Activity {
@Override
public void onResume() {
super.onResume();
new MyView(this, attrs).onResume();
}
...
}

public class MyView {
public void onResume() {
myButton.setOnClickListener(this);
}
...
}

我使用 Roboguice一直都在做这种事情,强烈推荐。我的按钮处理程序代码如下所示:

class ButtonHandler implements OnClickListener {
@InjectView(R.id.MainMenuButton)
private Button button;

public void onResumeEvent( @Observes OnResumeEvent onResume ) {
button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
doSomethingUseful();
}
}

关于Android 并使 `this` 成为其按钮之一的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7212406/

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