2016-08-13 2 views
0

メインアクティビティのonCreateファイルで最初に作成されたtextViewがあります。このメインアクティビティ(XMLなし)で定義されたビューのテキストを設定する方法

Button btn = new Button(); 

そして、私は私の質問は、私はのテキストを変更するには、同じファイル内でこのIDにアクセスすることができる方法であるイドのようなそれのいくつかの属性といくつかのLayoutParams

btn.setText("Button"); 
btw.setId("btn"); 
btn.setLayoutParams(new ViewGroup.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT, 
    ViewGroup.LayoutParams.WRAP_CONTENT)); 

を設定するなどのボタン。いいえ

findViewById(R.id.btn); 

私がこれを行うときを除いて、私はエラーが発生します。これはXML内で定義されていないので、私は推測しています。

編集:これらのボタンは、プログラムの他の要素に基づいて生成されるため、xmlであらかじめ定義することはできません。

ありがとうございます。

+0

なぜIDが必要ですか?あなたの 'Button'を' MainActivity'の中のグローバル変数として定義し、そのファイル内のどこにでも使用してください。 –

+0

@ Yildirimはい、私はIDを必要とするので、入力に基づいてボタンを更新することができます。 –

+0

'findViewById'は、一般に、アクティビティの対応するXMLファイルで定義したUI要素を拡張するために使用され、Javaコードで作成するUI要素に対しては使用されません。 –

答えて

1

findViewById()は、動的に作成されたTextViewへの参照を取得するために、このメソッドに同じIDを渡すだけで十分です。あなたが使用してそれを見つけることができます。この例では

// Assign it ID 100, for example, when you're creating it 
btw.setId(100); 

:唯一の階層に添付景色を見つけたので、あなたはあなたが付属していることを確認する必要があり

TextView textView = (TextView) findViewById(100); 

findViewByIdことをあなたの動的階層へTextViewを作成しました。


代替方法:保存クラスのメンバとして参照。

まず、MainActivityクラスのプライベートクラスメンバーを定義します。その後、onCreateメソッドで初期化します。したがって、あなたがアクティビティクラス内でこのTextViewを必要とするところであれば、そのクラスメンバを使用すれば十分です。

public class MainActivity extends Activity{ 
    // This is the class member, I was talking about 
    private TextView mTextView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     mTextView = new TextView(this); 
     mTextView.setText("Button"); 

     mTextView.setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT)); 
    } 


    public void someMethod(){ 
     // Here you can reach to that TextView by using its reference saved in mTextView 
     mTextView.setText("Hi there!"); 
    } 
} 
+0

はい私はそれをしました。 findViewByIdなしでこれを行う方法はありますか?だから、あなたは統合ID割り当てをバイパスすることができますか? –

+0

@Fidel_Willis参照をクラスメンバーとして保存することができます。 –

+0

@Fidel_Willisまた、 'setTag'と' findViewWithTag'を実行することもできます。 –

関連する問題