gpt4 book ai didi

android - 来自不同上下文的 StartActivity

转载 作者:行者123 更新时间:2023-11-30 03:22:03 26 4
gpt4 key购买 nike

我有一个主类和一个单独的类 (OnClickBtn.java),我只想在其中保留按钮方法。我不想从主类而是从 OnClickBtn.java 开始新的 Activity 。

我已经运行了该程序,但它在启动时崩溃了。我想我的主要问题与 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 方法不在主 Activity 中?

谢谢,路德

好吧,我一直在搞乱代码,下面的代码似乎有效,ActivityA 不是从 MainActivity.java 而是从 OnClickBtn.java 开始的,正如我试图做的那样。这是代码:

主要 Activity .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;
}

}

最佳答案

正如其他人所说,用这种方式实例化一个Activity是不好的,不会起作用。他们没有用户定义的构造函数。它们只应使用 Intent 进行实例化。

您可以做的是在您的点击类中实现 OnClickListener。在那里你可以覆盖并将你的代码放在那里。

Here is an answer that demonstrates that .

如果您希望它们可重用并在每个 Activity 中具有相同的功能,那么您可以将它们放在一个 BaseActivity 中,您将扩展 > 在其他 Activity 中。

这个解释多一点in this SO answer

关于android - 来自不同上下文的 StartActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com