• ListView 中嵌套 GridView


    1、主布局文件

    <?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:background="#F5F5F5"
        android:orientation="vertical" >
    
        <ListView
            android:id="@+id/lv_apply_classify"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:cacheColorHint="#00000000"
            android:dividerHeight="10dip"
             >
        </ListView>
    
    </LinearLayout>

    2、listview 对应的item

    <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/tv_apply_classify_name"
            android:layout_width="match_parent"
            android:layout_height="35dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip"
            android:gravity="center_vertical"
            android:singleLine="true"
            android:text="应用"
            android:textSize="@dimen/font_body_16"
            android:textColor="@color/black" />
    
        <com.example.view.ClassifyGridView
            android:id="@+id/gv_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dip"
            android:layout_marginRight="5dip"
            android:layout_marginTop="5dp"
            android:horizontalSpacing="1dip"
            android:numColumns="2"
            android:verticalSpacing="1dip" >
        </com.<span style="font-family: Arial, Helvetica, sans-serif;">exaple</span><span style="font-family: Arial, Helvetica, sans-serif;">.ClassifyGridView></span>
    
    </LinearLayout>
    3、gridview对应的item

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/lv_item_selector"
        android:orientation="vertical"
        android:padding="5dip" >
    
        <TextView
            android:id="@+id/tv_apply_name"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="5dip"
            android:singleLine="true"
            android:text="应用"
            android:textSize="@dimen/font_body_16"
            android:textColor="@color/black" />
    
        <TextView
            android:id="@+id/tv_description_name"
            android:layout_width="120dip"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="5dip"
            android:maxLines="2"
             android:textSize="@dimen/font_body_14"
            android:text="应用 描述"
            android:textColor="@color/gray" />
     
    
    </LinearLayout>
    4、主Activity

    public class ClassifyActivity extends Activity {
    
    	private ListView mListView;
    	private ClassifyListViewAdapter mListViewAdapter;
    	private List<ApplyTest> mArrayList;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.apply_main_classify);
    		init();
    	}
    
    	private void init() {
    		mListView = (ListView) findViewById(R.id.lv_apply_classify);
    		initData();
    		mListViewAdapter = new ClassifyListViewAdapter(mArrayList,
    				ClassifyActivity.this);
    		mListView.setAdapter(mListViewAdapter);
    	}
    
    	private void initData() {
    		mArrayList = new ArrayList<ApplyTest>();
    		 
    		for (int i = 0; i < 2; i++) {
    			ApplyTest testApplyTest = new ApplyTest();
    			testApplyTest.setName("测试分类"+i);
    			List<ApplySub> arrayListForEveryGridView = new ArrayList<ApplySub>();
    			for (int j = 0; j < 4; j++) {
    				ApplySub sub = new ApplySub();
    				sub.setName("子项"+i+j);
    				arrayListForEveryGridView.add(sub);
    			}
    			testApplyTest.setSubs(arrayListForEveryGridView);
    			mArrayList.add(testApplyTest);
    		}
    
    	}
    
    	public class ApplyTest {
    		private String name;
    		private List<ApplySub> subs;
    
    		public String getName() {
    			return name;
    		}
    
    		public void setName(String name) {
    			this.name = name;
    		}
    
    		public List<ApplySub> getSubs() {
    			return subs;
    		}
    
    		public void setSubs(List<ApplySub> subs) {
    			this.subs = subs;
    		}
    
    	}
    
    	public class ApplySub {
    		private String id;
    		private String name;
    
    		public String getId() {
    			return id;
    		}
    
    		public void setId(String id) {
    			this.id = id;
    		}
    
    		public String getName() {
    			return name;
    		}
    
    		public void setName(String name) {
    			this.name = name;
    		}
    
    	}
    }
    

    5、listview适配器

    public class ClassifyListViewAdapter extends BaseAdapter {
    	private List<ApplyTest> mList;
    	private Context mContext;
    
    	public ClassifyListViewAdapter(List<ApplyTest> mList,
    			Context mContext) {
    		super();
    		this.mList = mList;
    		this.mContext = mContext;
    	}
    
    	@Override
    	public int getCount() {
    		if (mList == null) {
    			return 0;
    		} else {
    			return this.mList.size();
    		}
    	}
    
    	@Override
    	public Object getItem(int position) {
    		if (mList == null) {
    			return null;
    		} else {
    			return this.mList.get(position);
    		}
    	}
    
    	@Override
    	public long getItemId(int position) {
    		return position;
    	}
    
    	@Override
    	public View getView(int position, View convertView, ViewGroup parent) {
    		ViewHolder holder = null;
    		if (convertView == null) {
    			holder = new ViewHolder();
    			convertView = LayoutInflater.from(this.mContext).inflate(R.layout.apply_main_classify_gv, null);
    			holder.gridView = (GridView) convertView.findViewById(R.id.gv_toolbar);
    			holder.tv_apply_classify_name = (TextView) convertView.findViewById(R.id.tv_apply_classify_name);
    			convertView.setTag(holder);
    		} else {
    			holder = (ViewHolder) convertView.getTag();
    		}
    
    		if (this.mList != null) {
    			if (holder.gridView != null) {
    				ApplyTest mApplyTest = this.mList.get(position);
    				ClassifyGridViewAdapter gridViewAdapter = new ClassifyGridViewAdapter(mContext,mApplyTest.getSubs());
    				holder.gridView.setAdapter(gridViewAdapter);
    				holder.tv_apply_classify_name.setText("分类"+position+mApplyTest.getName());
    			}
    		}
    		return convertView;
    	}
    
    	private class ViewHolder {
    		GridView gridView;
    		public TextView tv_apply_classify_name;
    	}
    }

    6、gridview 适配器

    public class ClassifyGridViewAdapter extends BaseAdapter {
    	private Context mContext;
    	private List<ApplySub> mList;
    
    	public ClassifyGridViewAdapter(Context mContext,
    			List<ApplySub> mList) {
    		super();
    		this.mContext = mContext;
    		this.mList = mList;
    	}
    
    	@Override
    	public int getCount() {
    		if (mList == null) {
    			return 0;
    		} else {
    			return this.mList.size();
    		}
    	}
    
    	@Override
    	public Object getItem(int position) {
    		if (mList == null) {
    			return null;
    		} else {
    			return this.mList.get(position);
    		}
    	}
    
    	@Override
    	public long getItemId(int position) {
    		return position;
    	}
    
    	@Override
    	public View getView(final int position, View convertView, ViewGroup parent) {
    		ViewHolder holder = null;
    		if (convertView == null) {
    			holder = new ViewHolder();
    			convertView = LayoutInflater.from(this.mContext).inflate(R.layout.apply_main_classify_group, null);
    			holder.tv_apply_name = (TextView) convertView.findViewById(R.id.tv_apply_name);
    			holder.tv_description_name = (TextView) convertView.findViewById(R.id.tv_description_name);
    			holder.iv_apply_classify_icon =  (RemoteImageView) convertView.findViewById(R.id.iv_apply_classify_icon);
    			convertView.setTag(holder);
    		} else {
    			holder = (ViewHolder) convertView.getTag();
    		}
    
    		if (this.mList != null) {
    			ApplySub sApplySub = this.mList.get(position);
    			if (holder.tv_apply_name != null) {
    				holder.tv_apply_name.setText(sApplySub.getName());
    //				holder.tv_description_name.setText(hashMap.get("content").toString());
    				holder.tv_apply_name.setOnClickListener(new OnClickListener() {
    					@Override
    					public void onClick(View v) {
    						Toast.makeText(mContext, "第" + (position + 1) + "个",
    								Toast.LENGTH_SHORT).show();
    					}
    				});
    			}
    		}
    		return convertView;
    	}
    
    	private class ViewHolder {
    		TextView tv_apply_name;
    		TextView tv_description_name;
    	}
    }

    7、重写gridview让其不滚动

    public class ClassifyGridView extends GridView {
    	
    	public ClassifyGridView(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);
    
    	}
    
    }




     


  • 相关阅读:
    React Native for Android应用名及图标修改
    如何不使用Navigator空间实现跳转页面?
    ReactNative WebView组件详解
    react-native react-navigation使用
    微信小程序——选择某个区间的数字
    Git分支操作——查看、新建、删除、提交、合并
    Github + Hexo 搭建个人博客
    微信小程序——动态设置swiper的高度
    微信小程序——购物车结算
    解决stackoverflow打开慢的问题
  • 原文地址:https://www.cnblogs.com/lbangel/p/4335875.html
Copyright © 2020-2023  润新知