Android:只能显示一行

时间:2014-03-27 09:02:12

标签: android performance android-layout android-scrollview

我有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)这样的方法(通常它会将一些图形组件添加到行,然后将此行添加到ScrollView):

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变量中有多少元素,总会显示一行:
enter image description here
问:
我做错了什么?在我看来逻辑上一切都很好。
另一个问题:这种方式有效吗?也许我应该以不同的方式添加结果?我问,因为可能有很多。

2 个答案:

答案 0 :(得分:1)

ScrollView只能有一个子节点,因此请将您的布局包装在另一个添加到ScrollView的大布局中。

但正如评论中所建议的,使用ListView!这就是它的用途......特别是当你要显示许多行时。 ListView将回收未使用的视图,并且肯定会产生比您的方法更好的性能。

答案 1 :(得分:0)

滚动视图是一个使其自己的子项可滚动的容器,因此,您必须将子项添加到滚动视图,稍后将项目添加到该子项。 没有高手是什么孩子,它可以是列表视图,可以是线性布局等。