-3

私はAndroidの初心者です。継承の基本でこのコードを試して、void関数クラスAからメッセージを取得して表示させようとしていますが、できません...このメッセージjava.lang.nullpointerexeptionを表示してください...これはクラス A のタラであり、主な活動は ... そしてありがとう :

A.java :

public class A extends Activity {

    public void showA(){
        Toast.makeText(this, "Class A", Toast.LENGTH_SHORT).show();
    }
}

MainActivity.java:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button show_a=(Button)findViewById(R.id.Show_A);

        show_a.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try{
                    A c=new A();
                    c.showA();
                }
                catch(Exception e){
                    Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_LONG).show();
                }   
            }
        });
    }
4

4 に答える 4

2

アクティビティからコンテキストを渡す:

 A c=new A(getApplicationContext());
                c.showA();

クラス A を変更します。

public class A {

Context c;
public A(Context c) {
    this.c=c;
}

public void showA(){
    Toast.makeText(c, "Class A", Toast.LENGTH_SHORT).show();
}

}

于 2013-11-07T13:04:53.150 に答える
0

クラスAを次のように変更してみてください:

public class A{
   public void showA(Context ctx){
   Toast.makeText(ctx, "Class A", Toast.LENGTH_SHORT).show();
}

}

public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button show_a=(Button)findViewById(R.id.Show_A);

show_a.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        try{
            A c=new A();
            c.showA(MainActivity.this);
        }
        catch(Exception e){
            Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_LONG).show();
        }   
    }
});

} }

于 2013-11-07T13:03:32.363 に答える
0

アクティビティ A を間違った方法で作成しています。アクティビティは Android によって管理されるため、アクティビティを作成するのではなく、アクティビティを起動するようにシステムに通知します。そして、Android に通知する方法はIntentsを使用しています。

 Intent myIntent = new Intent(this, A.class);
 startActivity(myIntent);

次に、A アクティビティのonResumeでトーストを表示できます。

 @Override
 public void onResume(){
     super.onResume();
     showA();
 }

または、@ imperator_spが言ったようにクラスAを変更できます

于 2013-11-07T13:05:13.483 に答える
0

あなたがここでやっていることは Java によれば良いことですが、Android に関しては良い習慣ではありません。ここでできることは、クラス A を拡張せず、メソッドを以下のものActivityに置き換えることです。showA()

public static void showA(Context context, String text){
    Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}

次のように、どこからでもこのメソッドを呼び出します:-

showA(this, "Class A");
于 2013-11-07T13:06:23.200 に答える