2017-02-25 7 views
0

を図示していない私は、この形式のUIコンポーネントを有する:アンドロイド:動的に生成されたビューを加えなく

<RelativeLayout 
     android:id="@+id/item_lists" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:weightSum="1" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin"> 
     <TextView 
      android:id="@+id/first_list" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:visibility="visible" 
      android:text="First List"/> 

     <ListView 
      android:id="@+id/list_view" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/first_list" 
      android:divider="@android:color/transparent" 
      android:dividerHeight="10dp" > 

     </ListView> 

    </RelativeLayout> 

外側RelativeLayoutを動的に追加するためのロジック、私は動的ビューを生成し、中に注入する予定のラッパーでありますビュー(テキストのタイトルと別のリストビュー):

private void populateLists() { 
    View pre = firstList; // this points to the list view "list_view" 
    if(!titleMap.isEmpty()) { // titleMap is a hashmap that maps titles to lists 
     Set<String> titles = getTitles(); 

     for(String title : titles){ 
       List<Item> li = titleMap.get(title); 
       TextView tag = generateTitleTextView(title, pre); 
       ListView lv = generateListView(li, tag); 
       sceneLists.addView(tag); 
       sceneLists.addView(lv); 

       pre = lv; 
      } 
     } 

} 

generateTitleTextView(String title, View pre)generateListView(List<Item> list, View pre)は、ビューを生成する2つの方法ですと

を使用して、Viewコンポーネントの事前の下で生成されたビューを配置
layoutParams.addRule(RelativeLayout.BELOW, pre.getId()); 

コードは例外なく実行できますが、生成されたビューはページに表示されません。何が問題なのでしょうか?前もって感謝します!

編集:generateTitleTextViewのコード、generateListViewは同様の唯一の違いは、それはあなたがリストビューviewIdを生成するにはどうすればよい

private TextView generateTitleTextView(String title, View pre) { 
    TextView tag = new TextView(this); 
    tag.setId(generateRandomViewId());// generates a random int as Id 
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.MATCH_PARENT, 
      RelativeLayout.LayoutParams.MATCH_PARENT); 
    layoutParams.addRule(RelativeLayout.BELOW, pre.getId()); 
    tag.setLayoutParams(layoutParams); 

    tag.setText(title); 

    return tag; 
} 

答えて

0

を生成しているのですか? HierarchyViewerを使用するか、Developer OptionsでShow layout boundsをオンにしてこれをデバッグすることができます。

私はあなたのコードのこの部分でのビューIDを生成しようとすべきだと思う:

public static int generateViewId() { 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     for (; ;) { 
      final int result = sNextGeneratedId.get(); 
      // aapt-generated IDs have the high byte nonzero; clamp to the range under that. 
      int newValue = result + 1; 
      if (newValue > 0x00FFFFFF) { 
       newValue = 1; // Roll over to 1, not 0. 
      } 
      if (sNextGeneratedId.compareAndSet(result, newValue)) { 
       return result; 
      } 
     } 
    } else { 
     return View.generateViewId(); 
    } 
} 
+0

私はランダムなUUIDのハッシュコードを使用してのviewId生成します。それは問題ではないと思いますか?私はあなたの提案ごとにデバッグを試みます、ありがとう! –

+0

私はあなたが提案したコードは、View.generateViewId()の実装のロジックを使用していると思う、それは私の状況に役立たなかった。 –

関連する問題