2012-01-10 4 views
0

私は5つのボタンを持つメイン画面を持っています。 aボタンを押すたびに、新しい画面に移動したい。今まで私は5つのクラス(各スクリーンごとに)と5つのxmlを持っています。しかし、この画面でもっと良い方法があり、xmlsが同じであることを確かめて、私がやりたいことはテキストやデータをデータベースから取り出すことです。私は別のクラスと1つの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); 

     } 
     }); 

誰もが私のクラスに引数を与える方法と、それはそれらのタイプがどうあるべきかを提案することはできますか?

答えて

1

あなたの質問を正しく理解している場合は、アクティビティに引数を渡します。通常、それはクラスコンストラクタによって行われますが、アクティビティにはユーザ定義のコンストラクタを持つことはできません。インテント作成を通じて間接的にしかインスタンス化することはできません。

bundle.putInt("intName",intValue); 

は、あなたが活動を開始する前に

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"); 
    } 
} 

他のデータ型と同じようにString booleanなどを渡すことができます。これで十分ではなく、より複雑なデータを渡す必要がある場合は、を使用します。

+0

はい、このようなものです。したがって、渡したい型の番号とパラメータにも関わらず、バンドルを作成して、次にb.putInt、b.putIntと言ってください。 (または各パラメータの異なるバンドル?)多くのありがとう! – ghostrider

+1

はい、正確です。もちろん、Parcelableインターフェイスを実装しているクラスにそれらをラップし、 'b.putExtra(String name、Parcelable value)'でクラス全体をExtrasにするよりも、渡す引数が多い場合は、 – vitakot

1

あなたは、それに余分なのを追加することにより、意図して、次のような何かのパラメータを渡すことができます:あなたの活動あなたがテントを取得し、あなたのパラメータを抽出するためにgetIntent()メソッドを使用することができて

Intent i = new Intent(this, MyActivity.class); 
i.putExtra("paramName", "value"); 
startActivity(i); 

を(S )それから:

Intent i = getIntent(); 
Bundle extras = i.getExtras(); 
String param = extras.getString("paramName", "default value"); 

あなたのテント内のすべての異なるテキストとデータを配置することができますが、データやテキストを取得する意図パラメータの値に基づいて決定することができます。データやテキストがたくさんある場合は、2番目の方法を使用する方がよいでしょう。

1
If you want to pass object instead of simple data, you must use parcelable objects as it´s explained in: [http://developer.android.com/reference/android/os/Parcelable.html][1] 

Reading and writing with parcelable objects is very similar to the way with a simple data 

Intent intent = new Intent(this ,newthing.class); 
Bundle b = new Bundle(); 
b.putParcelable("results", listOfResults); 
intent.putExtras(b); 
startActivityForResult(intent,0); 

Intent i = getIntent(); 
Bundle extras = i.getExtras(); 
String param = extras.getParcelable("results"); 
関連する問題