2016-09-17 39 views
-2

我想使用Horizo​​ntalScrollView實現該庫。但它會拋出java.lang.illegalStateException。 logcat提示Horizo​​ntalScrollView只能託管一個直接子項。我只設置了一個直接子對象 - LinearLayout。我從網上搜索,但還沒有解決問題。希望任何人都可以幫助我。 Belows是代碼。java.lang.IllegalStateException:Horizo​​ntalScrollView只能託管一個直接子節點

XML

<HorizontalScrollView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="8dp" 
    android:scrollbars="none" 
    > 

    <LinearLayout 
     android:id="@+id/gallery_layout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
    </LinearLayout> 

</HorizontalScrollView> 

項目XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:paddingTop="10dp" 
    android:paddingLeft="8dp" 
    android:paddingRight="8dp" 
    android:paddingBottom="20dp" 
    > 

    <ImageView 
     android:id="@+id/trend_item_imageview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingBottom="8dp" 
     android:src="@drawable/gallery0" 
     /> 

    <TextView 
     android:id="@+id/trend_item_textview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="權利的遊戲" 
     android:textSize="16sp" 
     /> 

</LinearLayout> 

片段

public class DiscoverFragment extends Fragment { 

    private int[] imageResources = {R.drawable.gallery0, R.drawable.gallery1, R.drawable.gallery2, 
     R.drawable.gallery3, R.drawable.gallery4, R.drawable.gallery5}; 

    private String[] imageDescriptions = {"權利的遊戲", "風吹的風景", "插畫背景", "美食君", "吃", "你好四月"}; 

    private List<TrendItem> trendItemList; 
    private LinearLayout galleryLayout; 

    public DiscoverFragment() { 
    // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_discover, container, false); 
     ButterKnife.bind(this, view); 
     galleryLayout = ButterKnife.findById(view, R.id.gallery_layout); 
     initData(); 
     setView(); 
     return view; 
    } 

    private void initData(){ 
     trendItemList = new ArrayList<>(); 
     for (int i = 0; i < imageResources.length; i++){ 
      TrendItem trendItem = new TrendItem(); 
      trendItem.setImageResource(imageResources[i]); 
      trendItem.setText(imageDescriptions[i]); 
      trendItemList.add(trendItem); 
     } 
    } 

    private void setView(){ 
     for (int i = 0; i < trendItemList.size(); i++){ 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      View view = inflater.inflate(R.layout.trend_item, galleryLayout, false); 
      ImageView trendItemImageView = ButterKnife.findById(view, R.id.trend_item_imageview); 
      TextView trendItemTextView = ButterKnife.findById(view, R.id.trend_item_textview); 
      trendItemImageView.setImageResource(trendItemList.get(i).getImageResource()); 
      trendItemTextView.setText(trendItemList.get(i).getText()); 
      galleryLayout.addView(view); 
     } 
    } 
} 
+0

哪一行觸發錯誤?這是你使用的所有代碼嗎?代碼是否會調用'initData'和'setView'方法? – Shadov

+0

這不是我使用的所有代碼,而是與horizo​​ntalscrollview相關的代碼。我想也許是'initdata'和'setview'的調用。否則,不應該報錯。 –

+0

爲什麼不使用水平回收視圖? –

回答

0

含義,您必須將ImageViewTextView添加到Linearlayout。當你添加imageview的時候,你將它添加到HorizontalScrollview,它也有一個LinearLayout它們通過添加2個子元素到Horizo​​ntalScrollView,你不能這樣做。

<HorizontalScrollView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:padding="8dp" 
android:scrollbars="none"> 

<LinearLayout 
    android:id="@+id/gallery_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

<ImageView 
    android:id="@+id/trend_item_imageview" 
    android:layout_width="your_size" 
    android:layout_height="your_size" 
    android:src="@drawable/gallery0"/> 

<TextView 
    android:id="@+id/trend_item_textview" 
    android:layout_width="your_size" 
    android:layout_height="your_size" 
    android:text="權利的遊戲" 
    android:textSize="16sp"/> 

</LinearLayout> 

</HorizontalScrollView> 
+0

如果我想添加多個imageview和textview,怎麼辦?屬於'horizo​​ntalscrollview'的'linearlayout'是否可以充當容器來容納多個'linearlayout'(在linearlayout中,有一個imageview和一個textview)? –

相關問題