Android 使用CWAC合并使TextView和ExpensableListView可滚动的线性布局

Android 使用CWAC合并使TextView和ExpensableListView可滚动的线性布局,android,expandablelistview,expandablelistadapter,commonsware-cwac,Android,Expandablelistview,Expandablelistadapter,Commonsware Cwac,我的问题是,我的活动有一个大的TextView,在TextView下面有一个ExpandableListView。不幸的是,TextView的文本太长,因此在展开ExpandableListView时无法看到详细信息 所以我的问题是,如何在代码中使用,以获得一个大的可滚动活动。 我希望activity_contact.xml中从scrollView1到底部的所有内容都是可滚动的!我已经将必要的libs(merge-1.0.1.jar和sacklist-1.0.0.jar)复制到我的项目中,但是我

我的问题是,我的活动有一个大的
TextView
,在
TextView
下面有一个
ExpandableListView
。不幸的是,
TextView
的文本太长,因此在展开ExpandableListView时无法看到详细信息

所以我的问题是,如何在代码中使用,以获得一个大的可滚动活动。

我希望activity_contact.xml中从scrollView1到底部的所有内容都是可滚动的!我已经将必要的libs(merge-1.0.1.jar和sacklist-1.0.0.jar)复制到我的项目中,但是我不知道如何应用MergeAdapter。如果有人能告诉我在哪里以及如何使用MergeAdapter,我将不胜感激

这是我的activity_contact.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <include layout="@layout/titlebar" />

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="wrap_content"
        android:layout_height="0dip"
        android:layout_marginTop="0dp"
        android:layout_weight="1"
        android:fillViewport="true" >

        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <TableRow
                android:id="@+id/tableRow1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <TextView
                    android:id="@+id/contact"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:paddingLeft="5dp"
                    android:paddingRight="5dp"
                    android:text="@string/contact"
                    android:textSize="@dimen/textSize" />
            </TableRow>


            <TableRow
                android:id="@+id/tableRow2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <ExpandableListView
                    android:id="@+id/listView"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="10dp" >
                </ExpandableListView>
            </TableRow>
        </TableLayout>
    </ScrollView>
</LinearLayout>

这是我的Contact.java类:

public class Contact extends Activity {

    private SparseArray<Group> groups = new SparseArray<Group>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact);
        ExpandableListView listView = (ExpandableListView) findViewById(R.id.listView);
        createData();
        ExpandableListAdapter adapter = new ExpandableListAdapter(this, groups,
                false, null);
        listView.setAdapter(adapter);
    }

    private void createData() {
        Group group1 = new Group(getString(R.string.stringGroup));
        group1.children.add(getString(R.string.stringGroup2));
        groups.append(0, group1);
    }
}
公共类联系人扩展活动{
私有SparseArray组=新SparseArray();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact);
ExpandableListView listView=(ExpandableListView)findViewById(R.id.listView);
createData();
ExpandableListAdapter=新的ExpandableListAdapter(此,组,
假,空);
setAdapter(适配器);
}
私有void createData(){
groupgroup1=新组(getString(R.string.stringGroup));
group1.children.add(getString(R.string.stringGroup2));
追加(0,group1);
}
}
这是我的ExpandableListAdapter.java

public class ExpandableListAdapter extends BaseExpandableListAdapter {

    private final SparseArray<Group> groups;
    private LayoutInflater inflater;
    private Activity activity;
    private boolean setOnClickListener;
    private Class<?> onClickClass;

    public ExpandableListAdapter(Activity act, SparseArray<Group> groups,
            boolean setOnClickListener, Class<?> onClickListenerClass) {
        activity = act;
        this.groups = groups;
        inflater = act.getLayoutInflater();
        this.setOnClickListener = setOnClickListener;
        this.onClickClass = onClickListenerClass;

    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return groups.get(groupPosition).children.get(childPosition);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }

    @Override
    public View getChildView(int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        final String children = (String) getChild(groupPosition, childPosition);
        TextView text = null;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.listrow_details, null);
        }

        text = (TextView) convertView.findViewById(R.id.copyrightTextView);
        text.setText(Html.fromHtml(children));


        if (setOnClickListener) {
            convertView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(activity, onClickClass);
                    intent.putExtra("name", children);
                    activity.startActivity(intent);
                }
            });
        }
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return groups.get(groupPosition).children.size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return groups.size();
    }

    @Override
    public void onGroupCollapsed(int groupPosition) {
        super.onGroupCollapsed(groupPosition);
    }

    @Override
    public void onGroupExpanded(int groupPosition) {
        super.onGroupExpanded(groupPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return 0;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.listrow_group, null);
        }
        Group group = (Group) getGroup(groupPosition);
        ((CheckedTextView) convertView).setText(group.string);
        ((CheckedTextView) convertView).setChecked(isExpanded);
        return convertView;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }
}
公共类ExpandableListAdapter扩展了BaseExpandableListAdapter{
私人最终Sparsarray集团;
私人充气机;
私人活动;
私有布尔setOnClickListener;
私有类和私有类;
public ExpandableListAdapter(活动法案、SparseArray组、,
布尔值setOnClickListener,类onClickListenerClass){
活动=行动;
这个组=组;
充气器=act.getLayoutFlater();
this.setOnClickListener=setOnClickListener;
this.onClickClass=onClickListenerClass;
}
@凌驾
公共对象getChild(int-groupPosition,int-childPosition){
返回groups.get(groupPosition).children.get(childPosition);
}
@凌驾
公共长getChildId(int-groupPosition,int-childPosition){
返回0;
}
@凌驾
公共视图getChildView(int groupPosition,final int childPosition,
布尔值isLastChild、视图转换视图、视图组父级){
最终字符串children=(String)getChild(groupPosition,childPosition);
TextView text=null;
if(convertView==null){
convertView=充气机。充气(R.layout.listrow\u详细信息,空);
}
text=(TextView)convertView.findViewById(R.id.copyrightTextView);
text.setText(Html.fromHtml(children));
if(setOnClickListener){
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(活动,onClickClass);
意图。putExtra(“姓名”,儿童);
活动。开始触觉(意图);
}
});
}
返回视图;
}
@凌驾
公共整数getChildrenCount(整数组位置){
返回groups.get(groupPosition.children.size();
}
@凌驾
公共对象getGroup(int-groupPosition){
返回groups.get(groupPosition);
}
@凌驾
public int getGroupCount(){
返回组。size();
}
@凌驾
公共void-ongroupposition(int-groupPosition){
super.ongroupposition(groupPosition);
}
@凌驾
已扩展的公共组(int-groupPosition){
super.onGroupExpanded(groupPosition);
}
@凌驾
公共长getGroupId(int-groupPosition){
返回0;
}
@凌驾
公共视图getGroupView(int-groupPosition,布尔值isExpanded,
视图(视图、视图组父级){
if(convertView==null){
convertView=充气机。充气(R.layout.listrow_组,空);
}
组组=(组)getGroup(组位置);
((CheckedTextView)convertView).setText(group.string);
((CheckedTextView)convertView).setChecked(isExpanded);
返回视图;
}
@凌驾
公共布尔表ID(){
返回false;
}
@凌驾
公共布尔值isChildSelectable(int-groupPosition,int-childPosition){
返回false;
}
}
listrow_details.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:clickable="true"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/copyrightTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawablePadding="15dp"
        android:gravity="center_vertical"
        android:linksClickable="true"
        android:padding="10dp"
        android:textStyle="bold" >
    </TextView>

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@android:color/black" />

</LinearLayout>

MergeAdapter
是一个
ListAdapter
,而不是
expandablelistapter
。您不能使用
MergeAdapter
解决问题。欢迎您通读
MergeAdapter
的源代码,并尝试找出是否有方法创建
MergeExpandableListAdapter
或类似的东西

或者,在
ExpandableListView
之后创建一个没有长
TextView
的UI