1

ボタンメソッドだけを保持したいメインクラスと別のクラス(OnClickBtn.java)があります。メインクラスではなく、OnClickBtn.java から新しいアクティビティを開始したいと考えています。

プログラムを実行しましたが、起動時にクラッシュします。私の主な問題は、Intent オブジェクト「Intent int_btnOpenA =new Intent(objContex, ActivityA.class)」のコードに関連していると思います。

これは私のコード、MainActivity.java です。

 package com.example.and2dtest;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
//START***VIEW LIST E BOTTONI
    TextView txtView01;
    Button btnOpenA;
    Button btnOpenB;
    EditText editText1;

    OnClickBtn btnMethods=new OnClickBtn(this);
//END***VIEW LIST E BOTTONI

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//Start***set buttons views
        txtView01=(TextView)findViewById(R.id.txtView01);
        btnOpenA=(Button)findViewById(R.id.btnOpenA);
        btnOpenB=(Button)findViewById(R.id.btnOpenB);
        editText1=(EditText)findViewById(R.id.editText1);   

        btnOpenA.setOnClickListener(btnMethods);
        btnOpenB.setOnClickListener(btnMethods);
//end***set buttons views
    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }



}

これは OnClickBtn.java クラスです。

package com.example.and2dtest;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

public class OnClickBtn extends Activity implements OnClickListener {
MainActivity objContex;

    public OnClickBtn(MainActivity cont){
    objContex=cont;
    }

    Intent int_btnOpenA =new Intent(objContex, ActivityA.class); //<<THIS CAUSES CRASH!

    @Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.btnOpenA:
            Log.d("ZR", "in case btnOpenA");
            //this.startActivity(int_btnOpenA);  //<-clearly This Wont Start
            break;
        case R.id.btnOpenB:
            Log.d("ZR","in case btnOpenB");
            //do something
            break;

        }   
    }


}

メインアクティビティにないstartActivityメソッドを維持するにはどうすればよいですか?

ありがとう、ルター

わかりました私はコードをいじっていましたが、次のように動作しているようです.ActivityAはMainActivity.javaからではなくOnClickBtn.javaから開始されます. これはコードです:

MainActivity.java:

package com.example.and2dtest;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
//START***VIEW LIST E BOTTONI
    TextView txtView01;
    Button btnOpenA;
    Button btnOpenB;
    EditText editText1;


//END***VIEW LIST E BOTTONI

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

        OnClickBtn btnMethods=new OnClickBtn(this);
//Start***set buttons views
        txtView01=(TextView)findViewById(R.id.txtView01);
        btnOpenA=(Button)findViewById(R.id.btnOpenA);
        btnOpenB=(Button)findViewById(R.id.btnOpenB);
        editText1=(EditText)findViewById(R.id.editText1);   

        btnOpenA.setOnClickListener(btnMethods);
        btnOpenB.setOnClickListener(btnMethods);
//end***set buttons views
    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }



}

OnClickBtn.java:

package com.example.and2dtest;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

public class OnClickBtn implements OnClickListener {
Context objContext;

    public OnClickBtn(Context con){
    //v=view;
    objContext=con;
    }

    //Intent int_btnOpenA =new Intent(objContext, ActivityA.class);

    @Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.btnOpenA:
            Log.d("ZR", "in case btnOpenA");
            Intent int_btnOpenA =new Intent(objContext, ActivityA.class);
            objContext.startActivity(int_btnOpenA);
            break;
        case R.id.btnOpenB:
            Log.d("ZR","in case btnOpenB");
            //do something
            break;

        }   
    }


}

ActivityA.java:

package com.example.and2dtest;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class ActivityA extends Activity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity, menu);
        return true;
    }

}
4

6 に答える 6

1

他の人が言ったActivityように、この方法でインスタンス化するのは良くなく、うまくいきません。ユーザー定義のコンストラクターはありません。それらはIntent.

あなたができることはimplements OnClickListenerクリッククラスです。そこoverrideにあなたのコードを入れてください。

これがそれを示す答えです

それらを再利用可能にし、それぞれに同じ機能を持たせたい場合は、Activityそれらを に配置し、他の に配置できBaseActivityます。extendActivities

これは、このSOの回答でもう少し説明されています

于 2013-09-23T20:17:36.283 に答える
0

これを試して:

Intent int_btnOpenA;
public OnClickBtn(MainActivity cont){
 int_btnOpenA=new Intent(cont, ActivityA.class);
}
于 2013-09-23T20:26:24.010 に答える
0

クラス レベルではなく、onCreate() メソッドで btnMethods を設定してみてください。

.....

OnClickBtn btnMethods;

.....

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    btnMethods = new OnClickBtn(this);
    ......
}
于 2013-09-23T19:51:54.140 に答える