安卓。从另一个类中调用吐司时应用程序崩溃[重复]。

问题描述 投票:0回答:1

我是一个新手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);
            }
        }
    };
java android static android-context
1个回答
1
投票

好吧,我想明白了,这不是 view.getContext() 但该行 int selected_index=(int) view.getTag(); 导致崩溃。我先用下面的代码把它变成一个字符串,然后再变成int,就解决了。

String selected_index=view.getTag.toString();
int sidx=Integer.parseInt(selected_index);

0
投票

为什么不是这样?

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
            }
        }
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.