Android - 无法获得滚动视图以正确滚动列表

时间:2012-04-12 20:48:19

标签: android android-layout

我有这个非常基本的观点:

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

<TextView
    android:id="@+id/question_label"    
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Your question: "
    />     

<TextView
    android:id="@+id/question"    
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text=""
    />         

        <EditText  
            android:id="@+id/question_text"  
            android:layout_height="wrap_content"  
            android:hint="@string/question_comment_hint"  
            android:inputType="textMultiLine"  
            android:lines="4"  
            android:layout_width="fill_parent">  
        </EditText>

<Button  
            android:id="@+id/submit"  
            android:layout_height="wrap_content"  
            android:text="@string/submit"  
            android:onClick="sendFeedback"  
            android:layout_width="fill_parent">  
        </Button>       



<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >    

<TextView
    android:id="@+id/please_wait"    
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Please wait while the discussion loads..."
    />     

    <ListView
    android:id="@android:id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/label"
        android:textSize="20px" >        
    </ListView>         

    </LinearLayout>
</ScrollView>

</LinearLayout>

我希望用它来允许用户滚动整个评论列表。截至目前,当屏幕上有更多评论然后空格时,屏幕不会向下滚动。

知道我应该更改哪些内容以启用评论的滚动?

谢谢!

4 个答案:

答案 0 :(得分:1)

好像你试图在ListView中的注释上面添加一个标题。正如编码器所说,你不应该把一个ListView放在ScrollView中。您应该直接向ListView添加标题视图(请参阅addHeaderView)。

答案 1 :(得分:1)

我会完全取消滚动视图 - 基于我认为你想要完成的事情,因为listview将自己处理滚动。像这样:

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

<TextView
android:id="@+id/question_label"    
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Your question: "
/>     

<TextView
android:id="@+id/question"    
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
/>         

    <EditText  
        android:id="@+id/question_text"  
        android:layout_height="wrap_content"  
        android:hint="@string/question_comment_hint"  
        android:inputType="textMultiLine"  
        android:lines="4"  
        android:layout_width="fill_parent">  
    </EditText>

<Button  
        android:id="@+id/submit"  
        android:layout_height="wrap_content"  
        android:text="@string/submit"  
        android:onClick="sendFeedback"  
        android:layout_width="fill_parent">  
    </Button>       

<TextView
android:id="@+id/please_wait"    
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Please wait while the discussion loads..."
/>     

<ListView
android:id="@android:id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+id/label"
    android:textSize="20px" >        
</ListView>         

现在的区别是,带有“please_wait”的TextView不会随列表一起滚动。如果你需要它来滚动列表,我建议在java中使用动态构建的TableLayout作为列表,然后将它和textview添加到ScrollView。 TableLayout本身不会滚动,这就是为什么它比在ScrollView中使用ListView更好的解决方案。如果你想这样做,请告诉我,我会发布一些示例代码。

答案 2 :(得分:1)

基本上你可以这样做: 摆脱scrollview并加载textview。 像这样在listview中设置一个简单的适配器:

fList = (ListView)findViewById(R.id.lstview);
fList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[]{"Please wait while the discussion loads..."}));

获取您的评论并设置为列表视图。

list.setAdapter(adapter);

答案 3 :(得分:1)

你不应该在ScrollView中有一个ListView。 相反,膨胀一个LinearLayout(垂直):

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

    <TextView
        android:id="@+id/question_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Your question: " />

    <TextView
        android:id="@+id/question"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="" />

    <EditText
        android:id="@+id/question_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/question_comment_hint"
        android:inputType="textMultiLine"
        android:lines="4" >
    </EditText>

    <Button
        android:id="@+id/submit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="sendFeedback"
        android:text="@string/submit" >
    </Button>

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/please_wait"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Please wait while the discussion loads..." />

            <LinearLayout
                android:id="@+id/comments_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="invisible" >
            </LinearLayout>
        </LinearLayout>
    </ScrollView>

</LinearLayout>

在您的代码中:

LinearLayout commentsLayout = (LinearLayout) findViewById(R.id.comments_layout);

填充LinearLayout:

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    for(int i = 0; i < comments.size(); i++){

        View childView = inflater.inflate(R.layout.comment_list_item, commentsLayout, false);

        TextView comment = (TextView) childView.findViewById(R.id.comment);

        comment.setText("Something");

        categoriesLayout.addView(childView, i);

    }

这样的事情,希望这会有所帮助。