2014-03-27 55 views
0

我有XML:機器人:只有一行是可見

<RelativeLayout 
     android:id="@+id/IcdSearchMainPanel" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      tools:ignore="UselessParent" > 

      <own_components.SearchOutput 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="top" 
       android:orientation="vertical" > 

       <!-- HERE ARE ADDED ROWS WITH RESULTS IN JAVA CODE (look into SearchOutput.java) --> 

      </own_components.SearchOutput> 
     </ScrollView> 
    </RelativeLayout> 

我有類SearchOutput.java(其延伸的LinearLayout)用這樣的方法(通常它增加了一些圖形組件到行,然後將該行到滾動型):

public void setResultOutput(ResultContainer result) 
    { 
     for (int i = 0; i < result.size(); i++) 
     { 
      LinearLayout resultRow = new LinearLayout(getContext()); 
      resultRow.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
      resultRow.setOrientation(LinearLayout.HORIZONTAL); 
      resultRow.setGravity(Gravity.CENTER_VERTICAL); 
      if (i % result.getIterationStep() == 0) 
      { 
       resultRow.setPadding(0, 0, 0, 10); 
      } 
      addView(resultRow); 

      ImageView langFlag = new ImageView(resultRow.getContext()); 
      langFlag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
      try 
      { 
       Bitmap bitmap = BitmapFactory.decodeStream(MainClass.getAssetManager().open(Pathes.FLAGS_DIR + result.get(i)[0] + ".gif")); 
       langFlag.setImageBitmap(bitmap); 
       langFlag.setPadding(10, 0, 0, 0); 
      } 
      catch (IOException e) 
      { 
       Log.e("IMAGE_OPEN_EXC", e.toString()); 
      } 
      resultRow.addView(langFlag); 

      TextView number = new TextView(resultRow.getContext()); 
      number.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
      number.setPadding(10, 0, 0, 0); 
      number.setText(result.get(i)[1]); 
      resultRow.addView(number); 

      TextView text = new TextView(resultRow.getContext()); 
      text.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
      text.setPadding(20, 0, 0, 0); 
      text.setText(result.get(i)[2]); 
      resultRow.addView(text); 
     } 
    } 

問題:
不管有多少元素在result變量總是有一排showned:
enter image description here
問題:
我做錯了什麼?在我看來,邏輯上一切都是正確的。
另一個問題:這種方式有效嗎?也許我應該以不同的方式添加結果?我問,因爲可以有很多。

+0

更換'resultRow.setOrientation(LinearLayout.HORIZONTAL);'和'resultRow.setOrientation(LinearLayout.VERTICAL);' –

+2

我強烈建議使用ListView。 –

+0

@達尼爾:它會導致只有標誌將在頂部,「A00.0」標誌下,文本在「A00.0」下。它不會讓其他行出現。 – rainbow

回答

1

ScrollView只能有一個孩子,所以將您的佈局包裹到另一個大布局中,並將其添加到ScrollView中。

但正如評論中所建議的,使用ListView !!!這就是...特別是當你有很多行要顯示時。 ListView將回收未使用的視圖,並且肯定會產生比您的方法更好的性能。

+0

我忘了補充說SearchOutput擴展了LinearLayout。它實際上是一個對象(我希望)誰應該被包裝。無論如何,如果ScrollView包含多個元素,日誌將返回錯誤。 – rainbow

+0

對解決方案的評論:我使用本教程http://www.vogella.com/tutorials/AndroidListView/article.html來學習如何使用ListView。現在一切正常。 – rainbow

+0

明智的選擇,vogella的教程非常好,我偶爾回來:) – ElDuderino

0

滾動視圖是一個使其自己的子項可滾動的容器,因此,您必須將子項添加到滾動視圖,稍後將項目添加到該子項。 沒有掌握什麼是孩子,也可以是列表視圖,可以是線性佈局等

+0

我已經將它添加到XML和代碼中。你有沒有看到沒有添加的東西?也許我錯過了什麼? – rainbow

+0

嘗試滾動兩個方向,如果可以看到其他行,請嘗試調整滾動視圖的大小 – VinhNT