2017-08-27 1 views
1

私の例では、ボタンを押して3つのビュー(TextView、EditText、Button)を含む新しいLinearLayoutを追加します。AndroidはLinearLayoutの子ビューをループするとき、常に子ビューが同じです

すべてのLinearLayoutを追加した後、私は自分の子ビューをループしたいので、TextViewとEditTextを見つけていくつかのばかげたテキストを与えます。

しかし、私はLinearLayoutの子ビューをループし、どの子ビューがTextViewであり、どのEditTextがどの子ビューがTextViewであるかのように見えます。ここで

のLinearLayoutがどのように見えるかのコードは、xmlファイル名である:(field_konacno.xml):

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="50dp" 
 
    android:orientation="horizontal" > 
 

 
    <TextView 
 
     android:layout_width="0dp" 
 
     android:layout_height="match_parent" 
 
     android:layout_weight="1" 
 
     android:text="A)" 
 
     android:layout_marginTop="10dp" 
 
     android:textSize="20sp" 
 
     android:textStyle="bold" 
 
     android:gravity="center" 
 
     /> 
 

 
    <EditText 
 
     android:layout_width="0dp" 
 
     android:layout_height="wrap_content" 
 
     android:layout_weight="5" 
 
     android:hint="Unesite pitanje" 
 
     android:textColorHint="@color/colorPrimaryDark"/> 
 

 
    <Button 
 
     android:layout_width="0dp" 
 
     android:layout_height="40dp" 
 
     android:layout_weight="1" 
 
     android:layout_marginTop="10dp" 
 
     android:background="@android:drawable/ic_delete" 
 
     android:onClick="deleteView" /> 
 

 
</LinearLayout>

ここでは私のMain4Activityがどのように見えるかです:

public class Main4Activity extends AppCompatActivity { 
 

 
    private LinearLayout parentLinearLayout; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main4); 
 
     parentLinearLayout = (LinearLayout) findViewById(R.id.activity4_linearayout); 
 

 
     //creating first view 
 
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 
     final View rowView = inflater.inflate(R.layout.field_konacno, null); 
 
     parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount()); 
 

 
    } 
 

 
//adding new LinearLayout by pressing button 
 
    public void addNewLinearLayoutWithViews(View view) { 
 
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 
     final View rowView = inflater.inflate(R.layout.field_konacno, null); 
 

 
     parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount()); 
 

 

 
     if(rowView instanceof LinearLayout){ 
 
      LinearLayout linearLayout = (LinearLayout) rowView; 
 
      for (int i = 0; i<linearLayout.getChildCount(); i++){ 
 
       if (linearLayout.getChildAt(i) instanceof TextView){ 
 
        TextView someTetView = (TextView) linearLayout.getChildAt(i); 
 
        someTetView.setText("TV " + i); 
 
       }else if (linearLayout.getChildAt(i) instanceof EditText){ 
 
        EditText editText = (EditText) linearLayout.getChildAt(i); 
 
        editText.setText("EditText " + i); 
 
       }else { 
 
        //do nothing 
 
       } 
 
      } 
 
     } 
 
    } 
 

 
    public void deleteView(View view) { 
 
     parentLinearLayout.removeView((View) view.getParent()); 
 
    } 
 

 

 
}

ここに私のactivity_main4.xmlの様子があります: 私はリスナーではなく、xml経由でonClickを追加しています。

<?xml version="1.0" encoding="utf-8"?> 
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    xmlns:tools="http://schemas.android.com/tools" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    android:orientation="vertical" 
 
    tools:context="com.example.petar.addviewsdynamicly.Main4Activity"> 
 

 
    <LinearLayout 
 
     android:id="@+id/activity4_linearayout" 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:orientation="vertical"/> 
 

 
    <Button 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:text="Dodaj polje" 
 
     android:onClick="addNewLinearLayoutWithViews"/> 
 

 

 
</LinearLayout>

そして、ここで私は新しいのLinearLayoutを追加し、これまでとき、彼のすべての子ビューがTextViewにあることがわかりますように、絵です。 はコードでは、私はテレビを書くためのTextViewのために設定してのEditTextにあらかじめテキスト編集

enter image description here

感謝を書くために!

答えて

2

EditTextの条件から始めます。 EditTextはTextViewのサブクラスなので、 "instanceof TextView"はそのインスタンスに対してtrueを返します。

if (linearLayout.getChildAt(i) instanceof EditText){ 
    EditText editText = (EditText) linearLayout.getChildAt(i); 
    editText.setText("EditText " + i); 
} else if (linearLayout.getChildAt(i) instanceof TextView){ 
    TextView someTetView = (TextView) linearLayout.getChildAt(i); 
    someTetView.setText("TV " + i); 
}else { 
    //do nothing 
} 
+0

aaaaはいはい、わかりました。その働き。 – beginner

関連する問題