2017-05-19 15 views
-1

私は自分自身にアンドロイドを教えようとしていて、私は完全に立ち往生しています。 私は、デフォルトのテキストが "ボタン"である9つのボタンと、デフォルトのテキストが "Hello World!"であるTextViewの配列を持っています。Androidの初心者、ボタンのテキストが変更されない

I can get the TextView's text to change to Lorem Ipsum, 
but I can't get the button array text to change to "Btn something" 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
    rv = new RemoteViews(getPackageName(), R.layout.activity_main); 
    int i = 0; 
    bArr[i++] = (Button) findViewById(R.id.button1); 
    bArr[i++] = (Button) findViewById(R.id.button2); 
    bArr[i++] = (Button) findViewById(R.id.button3); 
    bArr[i++] = (Button) findViewById(R.id.button4); 
    bArr[i++] = (Button) findViewById(R.id.button5); 
    bArr[i++] = (Button) findViewById(R.id.button6); 
    bArr[i++] = (Button) findViewById(R.id.button7); 
    bArr[i++] = (Button) findViewById(R.id.button8); 
    bArr[i] = (Button) findViewById(R.id.button9); 

    for(i = 0; i < 0; i++) { 
     bArr[i].setText("Btn " + i); //Doesn't Work 
     rv.setTextViewText(bArr[i].getId(), "Btn " + i); // Doesn't work 
     bArr[i].setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Btn pressed", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    ((TextView)findViewById(R.id.text1)).setText("Lorem Ipsum"); // Works 
} 

とXMLファイル:

<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="edu.csub.cs.cenri3390.MainActivity" 
tools:showIn="@layout/activity_main" 
tools:layout_editor_absoluteY="25dp" 
tools:layout_editor_absoluteX="0dp"> 

<Button 
    android:id="@+id/button7" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Button" 
    tools:layout_constraintTop_creator="1" 
    tools:layout_constraintRight_creator="1" 
    app:layout_constraintRight_toRightOf="@+id/button4" 
    android:layout_marginTop="11dp" 
    app:layout_constraintTop_toBottomOf="@+id/button4" 
    tools:layout_constraintLeft_creator="1" 
    app:layout_constraintLeft_toLeftOf="@+id/button4" /> 
<!-- 8 more buttons.../> 
<TextView 
    android:id="@+id/text1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!" 
    tools:layout_constraintRight_creator="1" 
    tools:layout_constraintBottom_creator="1" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    tools:layout_constraintLeft_creator="1" 
    android:layout_marginBottom="91dp" 
    app:layout_constraintLeft_toLeftOf="parent" /> 

    </android.support.constraint.ConstraintLayout> 

ボタンが故障しているが、それは問題ではないはず、私は願っています。いずれにせよ、彼らは正しい場所に置かれています。

答えて

1

forループがここで正しくインスタンス化されず、実行されません。 i=0を設定し、ループにi<0の長さの実行を指示します。これは当然真実ではありません。

for(i = 0; i < 0; i++) { 
    bArr[i].setText("Btn " + i); //Doesn't Work 
    rv.setTextViewText(bArr[i].getId(), "Btn " + i); // Doesn't work 
    bArr[i].setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Btn pressed", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
} 

あなたは常に9つのボタンを持って知っていればあなただけのfor(i=0;i<9;i++)を行うことができます。

layout.getChildCount()を使用してボタンを繰り返し、個別にアクセスするにはlayout.getChildAt(i)を使用してください。だからではなく、

rv = new RemoteViews(getPackageName(), R.layout.activity_main); 
int i = 0; 
bArr[i++] = (Button) findViewById(R.id.button1); 
... 
bArr[i] = (Button) findViewById(R.id.button9); 

を行うのあなたは時々答えは、である、あなたは知っている

for(i=0;i<layout.getChildCount();i++) { 
    // Do something 
    layout.getChildAt(i).setText('something'); 
} 
+1

を行うことができるしている「私は遅よ。」私はパラメータが間違っていたことに気づかずに6時間ループを見ていましたxx – Chad

+0

あなたの提案されたループ修正は、 (i = 1; i <= 9; i ++) または for(i = 0; i <9; i ++) それ以外の場合は、8回しか反復しません。 – Chad

+0

@Chad良いキャッチ、0ベースにすることを意味。 – James

関連する問題