Java 让我的班级进行辩论

Java 让我的班级进行辩论,java,android,class,Java,Android,Class,我有一个有5个按钮的主屏幕。每次按下一个按钮,我都想进入一个新的屏幕。到目前为止,我还有其他5个类(每个屏幕对应一个类)和5个XML。但是我相信会有更好的方法,因为这个屏幕和XML是一样的,我想做的是更改一些文本和从数据库获取的数据。我确信我可以只对另一个类和一个xml进行ony操作,然后将所需的值作为参数传递。(想象一下,在最终状态下,我的应用程序必须有15个按钮,因此我认为有15个.java文件和15个xml文件看起来相同,并且只有图像和文本视图的一些值发生变化,这太浪费空间了,没有必要)。

我有一个有5个按钮的主屏幕。每次按下一个按钮,我都想进入一个新的屏幕。到目前为止,我还有其他5个类(每个屏幕对应一个类)和5个XML。但是我相信会有更好的方法,因为这个屏幕和XML是一样的,我想做的是更改一些文本和从数据库获取的数据。我确信我可以只对另一个类和一个xml进行ony操作,然后将所需的值作为参数传递。(想象一下,在最终状态下,我的应用程序必须有15个按钮,因此我认为有15个.java文件和15个xml文件看起来相同,并且只有图像和文本视图的一些值发生变化,这太浪费空间了,没有必要)。我的主要活动代码是:

public class MyActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    main2Theme();}

private void main2Theme() {
    setContentView(R.layout.main_new);

    Button Button100 = (Button)findViewById(R.id.Button100);
Button113.setOnClickListener(new OnClickListener()
    {   
        public void onClick(View v)
        {
            Intent i = new Intent(this, OtherScreenName.class);
           startActivity(i);
        }
    }); //and so on for 15 buttons
我的OtherScreenName.class是:

public class OtherScreenName extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Theme();
}

 @SuppressWarnings("null")
    private void Theme() {
        Log.d("SnowReportApp","Do first thing");
        setContentView(R.layout.otherscreenname); //THIS CHANGES IN EVERY CLASS DEPENDING ON THE ID OF THE BUTTON
        String result = "";
        InputStream is = null;
        StringBuilder sb=null;

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();//() before
        nameValuePairs.add(new BasicNameValuePair("ski_id","OtherScreenName"));
        TextView text1 = (TextView) findViewById(R.id.otherscreenname_1);
//THESE 2 CHANGE DEPERNDING ON THE BUTTON PRESSED
//perform action.....

//AND ALSO HERE I NEED THE ID OF THE BUTTON

 b1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent i = new Intent(OtherScreenName.this,MyActivity.class);
                startActivity(i);

        }
        }); 
公共类OtherScreenName扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
主题();
}
@抑制警告(“空”)
私人空间主题(){
Log.d(“SnowReportApp”,“做第一件事”);
setContentView(R.layout.otherscreenname);//这在每个类中都会根据按钮的ID进行更改
字符串结果=”;
InputStream=null;
StringBuilder sb=null;
ArrayList nameValuePairs=新的ArrayList();/()之前
添加(新的BasicNameValuePair(“ski_id”,“OtherScreenName”);
TextView text1=(TextView)findViewById(R.id.otherscreenname_1);
//这两个参数的变化取决于按下的按钮
//执行操作。。。。。
//这里我还需要按钮的ID
b1.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
Intent i=新的Intent(OtherScreenName.this,MyActivity.class);
星触觉(i);
}
}); 

有谁能建议如何为我的类提供参数以及参数的类型吗?

您可以通过向其添加额外的参数来传递参数,如下所示:

Intent i = new Intent(this, MyActivity.class);
i.putExtra("paramName", "value");
startActivity(i);
在活动中,可以使用getIntent()方法检索意图并从中提取参数:


您可以将所有不同的文本和数据放在Intent中,但也可以根据Intent参数的值来决定要检索哪些数据和文本。如果数据或文本太多,则最好使用第二种方法。

您可以通过添加额外的来传递带有Intent的参数,如下所示:

Intent i = new Intent(this, MyActivity.class);
i.putExtra("paramName", "value");
startActivity(i);
在活动中,可以使用getIntent()方法检索意图并从中提取参数:


您可以将所有不同的文本和数据放在您的意图中,但您也可以根据意图参数的值来决定要检索哪些数据和文本。如果数据或文本太多,您可能最好使用第二种方法。

如果我正确理解您的问题,您希望向活动传递参数。通常这将通过类构造函数完成,但是,活动不能有用户定义的构造函数,只能有默认的构造函数;它们只能通过意图创建间接实例化。如果需要在活动之间传递数据,请通过将附加项放入捆绑包来完成,例如:

bundle.putInt("intName",intValue);
然后,您可以通过以下方式从bundle中提取数据:

int intValue = bundle.getInt("intName");
在开始活动之前放置额外内容:

Intent i = new Intent(this, YourActivity.class);
Bundle b = new Bundle();

b.putInt("intName",intValue);
i.putExtras(b);
startActivity(i);
然后阅读onCreate方法中的附加内容:

public void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);

   Bundle b = getIntent().getExtras();
   int intValue;

   if (b != null)
   {
      intValue= b.getInt("intName");
   }
}

同样,您可以通过字符串布尔等方式传递其他数据类型。如果这还不够,并且您需要传递一些更复杂的数据,请使用。

如果我正确理解您的问题,您希望向活动传递参数。通常,这将通过类构造函数完成,但是,活动不能具有用户定义的构造函数UCTOR,仅为默认值;它们只能通过创建意图间接实例化。如果需要在活动之间传递数据,请通过将附加项放入捆绑包来实现,例如:

bundle.putInt("intName",intValue);
然后,您可以通过以下方式从bundle中提取数据:

int intValue = bundle.getInt("intName");
在开始活动之前放置额外内容:

Intent i = new Intent(this, YourActivity.class);
Bundle b = new Bundle();

b.putInt("intName",intValue);
i.putExtras(b);
startActivity(i);
然后阅读onCreate方法中的附加内容:

public void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);

   Bundle b = getIntent().getExtras();
   int intValue;

   if (b != null)
   {
      intValue= b.getInt("intName");
   }
}

同样的方法,您可以传递其他数据类型,如字符串布尔值等。如果这还不够,您需要传递一些更复杂的数据,那么请使用。

是这样的方法。因此,尽管我要传递的类型有数字和参数,但我创建了一个bundle,然后说b.putin,第二个是b.putInt,依此类推?(或者每个参数有不同的包?)非常感谢!是的,没错。当然,如果您有许多参数要传递,那么最好将它们包装到实现Parcelable接口的类中,并通过'b.putExtra(字符串名称,Parcelable值)附加整个类'是这样的。因此,尽管我要传递的类型有数字和参数,我还是创建了一个bundle,然后说b.putin,第二个是b.putin,依此类推?(或者每个参数有不同的bundle?)非常感谢!是的,完全正确。当然,如果您有许多要传递的参数,那么最好将它们包装到实现Parcelable接口的类中,并通过“b.putExtra(String name,Parcelable value)”将整个类放入Extras