ScrollView不使用Android中包含动态内容的LinearLayout滚动

ScrollView不使用Android中包含动态内容的LinearLayout滚动,android,scrollview,Android,Scrollview,我在滚动视图中有一个线性布局。我的布局如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="

我在滚动视图中有一个线性布局。我的布局如下:

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

    <TextView
        android:id="@+id/degree_planner_step2_title"
        style="@style/standard_text_view_appearance"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <View
        android:id="@+id/degree_planner_divider"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/Science" />

    <ScrollView
        android:id="@+id/sv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/Commerce"
        android:fillViewport="true">

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

在添加我的listview时,如果fillViewPort为true,它将扩展所有内容,但是最后一个可见的listview“year 3”本身是可滚动的,而不是整个线性布局本身。当我检查DDMS时,它显示scrollview不可滚动。如果fillViewport为false,则LinearLayout中的所有我的ListView都会收缩并变为一个项目高且可滚动。我试图让我的列表完全展开,一旦溢出,scrollview应该滚动linearlayout,而不是滚动列表视图中的单个项目。有人能帮忙吗

可在此处找到图像:

在上面的屏幕截图fillViewPort=false中,所有ListView都缩小到一个项目高度,并且每个都可以单独滚动,共有3个ListView

这是我的片段代码,为了简单起见,我用字母表的简单数据加载了listview,动态添加listview的方法是notifyCourseDataSetChange():

import java.io.IOException;
导入java.util.ArrayList;
导入org.holoeverywhere.widget.Toast;
导入android.content.SharedReferences;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.LinearLayout;
导入android.widget.ListView;
导入android.widget.RelativeLayout;
导入android.widget.ScrollView;
导入android.widget.TextView;
导入com.actionbarsherlock.app.SherlockFragment;
导入com.example.u2.R;
导入com.example.u2.constantsandprocesss.Course;
导入com.example.u2.constantsandprocesss.DatabaseHelper;
导入com.example.u2.constantsandprocesss.DegreeYear;
导入com.example.u2.constantsandprocesss.ScienceDegreePlan;
导入com.example.u2.constantsandprocesses.UCT_常量;
导入com.example.u2.constantsandprocesss.DegreePlan;
公共类DegreePlannerStep2Fragment扩展了SherlockFragment{
私人线路布局基地布局;
私有数据库助手DBHelper;
私人弦乐学院;
私有字符串度;
私有字符串;BREV;
私有字符串major1;
私有字符串major2;
私人计划;
私有文本视图标题;
私视分割器;
私人学院色彩;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
SharedReferences sp=getActivity().GetSharedReferences(UCT_常量.PREFS_度数,0);
faculty=sp.getString(“faculty”,null);
度=sp.getString(“度”,null);
DegreeAbRef=sp.getString(“DegreeAbRef”,null);
major1=sp.getString(“major1”,null);
major2=sp.getString(“major2”,null);
setRetainInstance(真);
如果(savedInstanceState==null){
DBHelper=newdatabasehelper(getActivity());
试一试{
Log.d(“DPS2”,“连接到db”);
DBHelper.connectDataBase();
}捕获(IOE异常){
e、 printStackTrace();
}
new GetAllCourses().execute(新字符串[]{major1,major2,faculty});
}
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.degree\u planner\u step\u 2,容器,错误);
if(faculty!=null){
学院颜色=选择颜色(学院);
baseLayout=(LinearLayout)view.findViewById(R.id.degreeplanner2\u lin\u布局);
title=(TextView)view.findViewById(R.id.degree\u planner\u step2\u title);
职称.学位;
分隔器=view.findViewById(R.id.degree\u planner\u分隔器);
挫折背景资源(学院色彩);
}
返回视图;
}
@凌驾
公共无效暂停(){
super.onPause();
DBHelper.close();
}
@凌驾
恢复时公开作废(){
super.onResume();
//开放数据库连接
试一试{
Log.d(“DPS2”、“期初db”);
DBHelper.connectDataBase();
}捕获(IOE异常){
e、 printStackTrace();
}
}
/*
*返回颜色变量的id(int)
*/
private int SelectColor(字符串facultyName){
String[]faculties=getActivity().getResources().getStringArray(R.array.faculties);
if(facultyName.equals(faculties[0])){
返回R.color.Commerce;
}else if(facultyName.equals(faculties[1])){
返回R.color.EBE;
}else if(facultyName.equals(faculties[2])){
返回R.color.Health\u Sciences;
}else if(facultyName.equals(faculties[3])){
返回R.color.human;
}else if(facultyName.equals(faculties[4])){
返回R.color.Law;
}否则{
返回R.color.Science;
}
}
公共无效notifyCourseDataSetChange(){
for(degreeYears-dy:plan.getDegreeYears()){
if(dy.isActive()){
LayoutFlater充气机=getActivity().GetLayoutFlater();
View section header=充气机。充气(R.layout.listview\u section\u header,null);
((TextView)sectionHeader.findviewbyd(R.id.section_header_title)).setText(“年”+dy.getYear());//节头标题
sectionHeader.findViewById(R.id.section\u header\u分隔符).setBackgroundResource(facultyColour);//节头分隔符
ListView lv=新的ListView(getActivity());
lv.SetHeaderDivisEnabled(假);
lv.addHeaderView(区段标题);
lv.setAdapter(新的ArrayAdapter(getActivity(),R
import java.io.IOException;
import java.util.ArrayList;

import org.holoeverywhere.widget.Toast;

import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;

import com.actionbarsherlock.app.SherlockFragment;
import com.example.u2.R;
import com.example.u2.constantsandprocesses.Course;
import com.example.u2.constantsandprocesses.DatabaseHelper;
import com.example.u2.constantsandprocesses.DegreeYear;
import com.example.u2.constantsandprocesses.ScienceDegreePlan;
import com.example.u2.constantsandprocesses.UCT_Constants;
import com.example.u2.constantsandprocesses.DegreePlan;

public class DegreePlannerStep2Fragment extends SherlockFragment {
    private LinearLayout baseLayout;
    private DatabaseHelper DBHelper;
    private String faculty;
    private String degree;
    private String degreeAbbrev;
    private String major1;
    private String major2;
    private DegreePlan plan;
    private TextView title;
    private View divider;
    private int facultyColour;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedPreferences sp = getActivity().getSharedPreferences(UCT_Constants.PREFS_DEGREE, 0);
        faculty = sp.getString("faculty", null);
        degree = sp.getString("degree", null);
        degreeAbbrev = sp.getString("degreeAbbrev", null);
        major1 = sp.getString("major1", null);
        major2 = sp.getString("major2", null);
        setRetainInstance(true);
        if (savedInstanceState == null){
            DBHelper = new DatabaseHelper(getActivity());
            try {
                Log.d("DPS2", "connecting to db");
                DBHelper.connectDataBase();
            } catch (IOException e) {
                e.printStackTrace();
            }
            new GetAllCourses().execute(new String [] {major1, major2, faculty});
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.degree_planner_step_2, container, false);
        if (faculty!=null){
            facultyColour = selectColour(faculty);
            baseLayout = (LinearLayout) view.findViewById(R.id.degreeplanner2_lin_layout);
            title = (TextView) view.findViewById(R.id.degree_planner_step2_title);
            title.setText(degree);
            divider = view.findViewById(R.id.degree_planner_divider);
            divider.setBackgroundResource(facultyColour);
        }
        return view;
    }

    @Override
    public void onPause() {
        super.onPause();
        DBHelper.close();
    }

    @Override
    public void onResume() {
        super.onResume();
        //open database connection
        try {
            Log.d("DPS2", "opening db");
            DBHelper.connectDataBase();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /*
     * returns the id (int) of the colour variable for the faculty
     */
    private int selectColour(String facultyName) {
        String [] faculties = getActivity().getResources().getStringArray(R.array.faculties);
        if (facultyName.equals(faculties[0])){
            return R.color.Commerce;
        }else if(facultyName.equals(faculties[1])){
            return R.color.EBE;
        }else if(facultyName.equals(faculties[2])){
            return R.color.Health_Sciences;
        }else if(facultyName.equals(faculties[3])){
            return R.color.Humanities;
        }else if (facultyName.equals(faculties[4])){
            return R.color.Law;
        }else{
            return R.color.Science;
        }
    }

    public void notifyCourseDataSetChange(){
        for (DegreeYear dy : plan.getDegreeYears()){
            if (dy.isActive()){
                LayoutInflater inflater = getActivity().getLayoutInflater();
                View sectionHeader = inflater.inflate(R.layout.listview_section_header, null);
                ((TextView)sectionHeader.findViewById(R.id.section_header_title)).setText("Year "+dy.getYear());        //section header title
                sectionHeader.findViewById(R.id.section_header_divider).setBackgroundResource(facultyColour);   //section header divider
                ListView lv = new ListView(getActivity());
                lv.setHeaderDividersEnabled(false);
                lv.addHeaderView(sectionHeader);
                lv.setAdapter(new ArrayAdapter<String>(getActivity(), R.layout.drawer_list_item,new String [] {"a","b","c","d"}));
                baseLayout.addView(lv);
            }
        }
    }

    private class GetAllCourses extends AsyncTask<String, Void, ArrayList<Course>>{
        String facultyName = "";

        @Override
        protected ArrayList<Course> doInBackground(String... params) {
            facultyName = params[2];
            return DBHelper.getCoursesForMajor(params[0], params[1]);
        }

        @Override
        protected void onPostExecute(ArrayList<Course> result) {
            super.onPostExecute(result);
            String [] faculties = getActivity().getResources().getStringArray(R.array.faculties);
            if (facultyName.equals(faculties[0])){          //COM
                //TODO create corresponding degree
            }else if(facultyName.equals(faculties[1])){     //EBE
                //TODO create corresponding degree
            }else if(facultyName.equals(faculties[2])){     //Health
                //TODO create corresponding degree
            }else if(facultyName.equals(faculties[3])){     //HUM
                //TODO create corresponding degree
            }else if (facultyName.equals(faculties[4])){    //LAW
                //TODO create corresponding degree
            }else{                                          //SCI
                plan = new ScienceDegreePlan(result);
            }
            notifyCourseDataSetChange();
        }

    }
}