我是一个新手Android开发者.我已经创建了一个 包私有类 扩展了Application,并包含了特定功能所需的代码。我基本上是想通过一个toast来显示用户选择的按钮是否正确。由于我必须在许多活动中调用这段代码,我只是为它创建了一个包私有类。但是,在点击按钮时,应用程序崩溃了。请看下面给出的代码供参考。
我不能将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.Factivity.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);
}
}
};
好吧,我想明白了,这不是 view.getContext()
但该行 int selected_index=(int) view.getTag();
导致崩溃。我先用下面的代码把它变成一个字符串,然后再变成int,就解决了。
String selected_index=view.getTag.toString();
int sidx=Integer.parseInt(selected_index);
为什么不是这样?
public class activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.YOUR_FILE_XML_WITH_THE_BUTTON);
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(){
//do your toast
}else{
//do your toast
}
}
});
}