`

ExpandableListView 中嵌套 gridview

阅读更多

ExpandableListView 中嵌套 gridview ,都是viewgroup 这样嵌套的话 gridview只会显示一行

原因: 就是有滚动条的控件里放有滚动条的控件就会出现只显示一两行的问题,,解决的办法就是, 把子控件设置为没有滚动条. 具体就是自定义控件.
把GridView自定义一下,代码如下,然后用这个自定义的控件就行了

<?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"
     >

    <com.example.mygridview.MyGridview
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="3"
        android:columnWidth="80dp"
        android:stretchMode="columnWidth"
        android:background="@drawable/background">
    </com.example.mygridview.MyGridview> 

</LinearLayout>

/////////////////////////////////////////////////////////////////////////类这样写就是了,这也算自定义组件

package com.example.mygridview;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
public class MyGridView extends GridView
{
public MyGridView(android.content.Context context,
android.util.AttributeSet attrs)
{
super(context, attrs);
}

/**
* 设置不滚动
*/
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);

}

}

 

//要想该界面除了显示ExpandableListView 还显示别的view的话


<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/textView2"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text=""
android:gravity="center"
android:background="@drawable/backgroud003"
/>

<ExpandableListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</ExpandableListView>

</LinearLayout>

 

//activity如何实现

package com.example.mxhome;

import java.util.ArrayList;

import com.example.adapter.GridViewHolder;
import com.example.adapter.MyAdapter;
import com.example.adapter.MyOnItemClickListener;
import com.example.application.APP;
import com.example.application.MyApplication;

import android.os.Bundle;
import android.app.Activity;
import android.app.ExpandableListActivity;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.BaseExpandableListAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class AppCategoryActivity extends ExpandableListActivity
{

private ArrayList<String> arrayList;
private ArrayList<APP> applist;
private ArrayList<APP> mxhomelist;
private ArrayList<APP> basiclist;
private ArrayList<APP> applicationlist;
private ListAdapter madapter=new BaseAdapter()
{

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = getLayoutInflater();
LinearLayout linearLayout = (LinearLayout)inflater.inflate(R.layout.item, null);
ImageView imageView = (ImageView)linearLayout.findViewById(R.id.imageView1);
TextView textView = (TextView)linearLayout.findViewById(R.id.textView1);
// imageView.setLayoutParams(new AbsListView.LayoutParams(96,96));
APP app = applist.get(position);
imageView.setImageDrawable(app.getIcon());
textView.setText(app.getLabel());
return linearLayout;
}

@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return 0;
}

@Override
public Object getItem(int position)
{
// TODO Auto-generated method stub
return null;
}

@Override
public int getCount()
{
return applist.size();
}
};

private BaseExpandableListAdapter adapter=new BaseExpandableListAdapter()
{

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}

@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
/**
* @return自定义的textview
*/
public TextView getGenericView() {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, 64);

TextView textView = new TextView(AppCategoryActivity.this);
textView.setLayoutParams(lp);
// Center the text vertically
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
// Set the text starting position
textView.setPadding(36, 0, 0, 0);
textView.setBackgroundResource(R.color.groud);
return textView;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(arrayList.get(groupPosition));
return textView;
}

@Override
public long getGroupId(int groupPosition) {
return 0;//可以不填
}

@Override
public int getGroupCount() {
return arrayList.size();//有几组
}

@Override
public Object getGroup(int groupPosition) {
return null;//可以不填
}

@Override
public int getChildrenCount(int groupPosition) {
return 1;//每组只有一个gridview,要清楚
}

@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
GridViewHolder gridViewHolder;
if(convertView==null)
{
gridViewHolder = new GridViewHolder();
convertView= getLayoutInflater().inflate(R.layout.expandlist_gridview, null);
gridViewHolder.gridview=(GridView) convertView.findViewById(R.id.gridView1);
convertView.setTag(gridViewHolder);
}
else
{
gridViewHolder= (GridViewHolder)convertView.getTag();
}
switch (groupPosition)
{
case 0:
gridViewHolder.gridview.setAdapter(new MyAdapter(AppCategoryActivity.this, basiclist));
gridViewHolder.gridview.setOnItemClickListener(new MyOnItemClickListener(AppCategoryActivity.this,basiclist));
break;
case 1:
gridViewHolder.gridview.setAdapter(new MyAdapter(AppCategoryActivity.this, mxhomelist));
gridViewHolder.gridview.setOnItemClickListener(new MyOnItemClickListener(AppCategoryActivity.this,mxhomelist));
break;
case 2:
gridViewHolder.gridview.setAdapter(new MyAdapter(AppCategoryActivity.this, applicationlist));
gridViewHolder.gridview.setOnItemClickListener(new MyOnItemClickListener(AppCategoryActivity.this,applicationlist));
break;

default:
gridViewHolder.gridview.setAdapter(new MyAdapter(AppCategoryActivity.this, mxhomelist));
gridViewHolder.gridview.setOnItemClickListener(new MyOnItemClickListener(AppCategoryActivity.this,mxhomelist));
break;
}
return convertView;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;//可以不填
}

@Override
public Object getChild(int groupPosition, int childPosition) {
return null;//可以不填
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app_category);
iniList();
iniText();

setListAdapter(adapter);

}

private void iniText()
{
arrayList = new ArrayList<String>();
arrayList.add("Basic Programs");
arrayList.add("MXHome");
arrayList.add("Applications");
arrayList.add("News & Weather");
arrayList.add("Entertainment");
arrayList.add("Life Style");
arrayList.add("Communication");
arrayList.add("Edu & Finance");
arrayList.add("Multimedia");
arrayList.add("Tools & ETC");
}

private void iniList()
{
applist = MyApplication.getAPPlist();
TextView all =(TextView) findViewById(R.id.textView2);
all.setText("all programs(" + applist.size()+")");
mxhomelist = new ArrayList<APP>();
basiclist = new ArrayList<APP>();
applicationlist = new ArrayList<APP>();
for (int i = 0; i <applist.size(); i++)
{
APP app = applist.get(i);
if((app.getLabel()+"").contains("我的桌面"))
{
mxhomelist.add(app);
}
else if(i<=15)
{
basiclist.add(app);
}
else if(i>15)
{
applicationlist.add(app);
}
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_app_category, menu);
return true;
}


}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics