ボタンメソッドだけを保持したいメインクラスと別のクラス(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;
}
}