【发布时间】:2020-05-14 15:31:32
【问题描述】:
我是一名新手 Android 开发人员。 我创建了一个 package-private 类,它扩展了 Application,并包含特定功能所需的代码。我基本上想通过吐司来显示用户选择的按钮是否是正确的选择。由于我必须为许多活动调用此代码,因此我只是为它创建了一个包私有类。但是,单击按钮时,应用程序崩溃。请参阅下面给出的代码以供参考。
我无法将 onClick 方法更改为非静态,因为如果这样做,Android Studio 会显示错误,如果我将其更改为静态,我将无法使用方法
getApplicationContext(),因为它是在静态块中无法访问。
我认为使用view.getContext() 会导致崩溃。
是否有任何解决方法或解决方案? 您的帮助将不胜感激。谢谢:)
这是供您参考的代码。
activity.java:
public class activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(functions.select);
functions.makeLayout(expression, buttons);
}
}
这是导致应用程序崩溃的代码。
functions.java:
class functions extends Application {
private static int idx;
public static View.OnClickListener select=new View.OnClickListener() {
@Override
public void onClick(View view) {
int selected_index=(int) view.getTag();
if(selected_index==idx)
{
Toast.makeText(view.getContext(), "Correct.", Toast.LENGTH_LONG).show();
((Button) view).setTextColor(Color.GREEN);
}
else
{
Toast.makeText(view.getContext(), "Wrong.", Toast.LENGTH_LONG).show();
((Button) view).setTextColor(Color.RED);
}
}
};
【问题讨论】:
-
@peprumo 先生,堆栈跟踪(在本例中为 logcat)没有给出任何异常,甚至没有给出行号。它只给出一个错误:
20:36:48.948 21734-21762/com.ex.myproj E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array -
天哪:D 你在做什么。如果你在写东西之前阅读一些关于 Java 语言和 android SDK 的东西会更好。应用程序类不是这样的地方。你想达到什么目标?
-
@EugeneTroyanskii 我写了一个函数来减少冗余代码。有没有其他方法可以检索上下文?这似乎很混乱。我想在按钮上显示吐司 点击查看用户选择是否正确。
-
@Sanskar 作为上下文。您可以在 onClick 方法 view.getContext() 中获取内部参数的视图。 Application 类通常用于某些必须用于正确工作的操作,例如数据库的初始化等...删除您的类函数。为了您的目的,创建类 CustomOnClick 实现 View.OnClickListener() 并使您的 Toask 在实现中。但在实际情况下,通常您必须在此按钮存在的活动/片段中准确地实现 onClick,并对用户操作做出特定反应。
标签: java android static android-context