`
antkingwei
  • 浏览: 41804 次
  • 性别: Icon_minigender_1
  • 来自: 日照
社区版块
存档分类
最新评论

Android 自定义BaseAdapter

阅读更多

不要对俺的贴图做评价

看一下代码实现

package com.android.wei.zidingyib;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ListView;
import java.util.*;

public class MyActivity extends Activity {
 
    private ListView listView;
    private ImageButton imageButton;
    private ListViewAdapter listViewAdapter;
    private List<Map<String,Object>> listItems;
    private Integer[] imgeIDs = {
    	R.drawable.niao,R.drawable.niao,R.drawable.rui,R.drawable.rui,
    	R.drawable.ning,R.drawable.ning
    };
    private String[] goodsNames={
    	"土豆丝","土豆块","土豆泥","红烧土豆",
    	"麻辣土豆","清蒸土豆"
    };
    private String[] goodsDetails={
    	"土豆丝:便宜又好吃",	"土豆丝:便宜又好吃",	"土豆丝:便宜又好吃",	
    	"土豆丝:便宜又好吃",	"土豆丝:便宜又好吃",	"土豆丝:便宜又好吃",
    };
    private int[] money={
    	2,3,3,10,8,13	
    };
   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listView=(ListView) this.findViewById(R.id.listview);
        imageButton = (ImageButton) this.findViewById(R.id.imagebutton);
        imageButton.setOnClickListener(new  ClickEvent());
        listItems = getListItems();
        listViewAdapter = new ListViewAdapter(this,listItems);
        listView.setAdapter(listViewAdapter);
    }
    private List<Map<String,Object>> getListItems(){
    	List<Map<String,Object>> listItems = new ArrayList<Map<String,Object>>();
    	for(int i=0;i<goodsNames.length;i++){
    		Map<String,Object> map = new HashMap<String,Object>();
    		map.put("image", imgeIDs[i]);
    		map.put("title", goodsNames[i]);
    		map.put("info", money[i]+"元");
    		map.put("detail", goodsDetails[i]);
    		listItems.add(map);
    	}
    	return listItems;
    }
    class ClickEvent implements OnClickListener{
    	public void onClick(View v){
    		String goodsList="";
    		int sun=0;
    		for(int i=0;i<listItems.size();i++){
    			goodsList += listViewAdapter.hasChecked(i)?goodsNames[i]+" ":"";
    			sun +=listViewAdapter.hasChecked(i)?money[i]:0;
    			
    		}
    		new AlertDialog.Builder(MyActivity.this)
    		.setTitle("点菜清单")
    		.setMessage("你好,你选择的菜:\n"+goodsList+"\n"+"总消费额为:"+sun+"元")
    		.setPositiveButton("确定",null)
    		.show();
    		
    	}
    }
}
 package com.android.wei.zidingyib;
import java.util.List;
import java.util.Map;

import android.app.AlertDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter{
    private Context context;
    
    private List<Map<String,Object>> listItems;
    
    private LayoutInflater listContainer;
    
    private boolean[] hasChecked;
    public final class ListItemView{
    	public ImageView image;
    	public TextView title;
    	public TextView info;
    	public CheckBox check;
    	public Button detail;
    }
    
    public ListViewAdapter(Context context,List<Map<String,Object>> listItems){
    	this.context = context;
    	listContainer = LayoutInflater.from(context);
    	this.listItems = listItems;
    	hasChecked = new boolean[getCount()];
    }
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return listItems.size();
	}

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

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return 0;
	}
	private void checkedChange(int checkedID){
		hasChecked[checkedID] = !hasChecked[checkedID];
	}
	public boolean hasChecked(int checkedID){
		return hasChecked[checkedID];
	}
	private void showDetailInfo(int clickID){
		new AlertDialog.Builder(context)
		   .setTitle("本菜详情:"+listItems.get(clickID).get("title"))
		   .setMessage(listItems.get(clickID).get("detail").toString())
	       .setPositiveButton("确定",null)
	       .show();
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		final int selectID= position;
		ListItemView listItemView = null;
		if(convertView ==null){
			listItemView = new ListItemView();
			convertView = listContainer.inflate(R.layout.list_item, null);
			//获得控件对象
			listItemView.image =(ImageView) convertView.findViewById(R.id.imageitem);
			listItemView.title =(TextView) convertView.findViewById(R.id.textview);
			listItemView.info =(TextView) convertView.findViewById(R.id.textview1);
			listItemView.detail=(Button) convertView.findViewById(R.id.button);
			listItemView.check = (CheckBox) convertView.findViewById(R.id.checkItem);
		   //设置空间集到convertView
			convertView.setTag(listItemView);
		}else{
			listItemView = (ListItemView) convertView.getTag();
		}
		//设置文字图片
		listItemView.image.setBackgroundResource((Integer)listItems.get(position).get("image"));
		listItemView.title.setText((String)listItems.get(position).get("title"));
		listItemView.info.setText((String) listItems.get(position).get("info"));
		listItemView.detail.setText("本菜介绍");
		listItemView.detail.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				showDetailInfo(selectID);
			}
		});
		listItemView.check.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){
			public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
				checkedChange(selectID);
			}
		});
		return convertView;
	}

}
 
分享到:
评论
1 楼 wuhanchendalong 2012-06-19  
哥们你能把这个源代码的布局文件发给我好吗?我看看  非常感谢   我的邮箱:wuhanchendalong@126.com

相关推荐

    Android自定义BaseAdapter

    总之,`BaseAdapter`是Android开发中的核心组件之一,掌握其自定义方法对于提升应用的用户体验至关重要。通过合理设计数据模型和视图布局,我们可以创建出功能强大且灵活的列表视图。在实际项目中,还可以结合`...

    ListView的使用自定义BaseAdapter

    至此,我们已经掌握了在Android Studio中使用ListView和自定义BaseAdapter的基本步骤。通过这种方式,你可以灵活地展示各种类型的数据,并且可以通过扩展Adapter来实现更复杂的功能,如点击事件、长按事件等。在实际...

    可复用的自定义BaseAdapter

    通过以上所述,我们可以理解自定义BaseAdapter在Android开发中的重要性和实现方式,以及如何通过优化使其具有可复用性。这不仅可以提高代码质量,还能降低维护成本,是Android开发中不可或缺的一个技术点。

    android中自定义适配器BaseAdapter

    **四、自定义BaseAdapter示例** 创建一个自定义的BaseAdapter通常需要以下步骤: 1. 定义数据模型类,例如`MyItem`,包含需要显示的属性。 2. 创建继承自BaseAdapter的自定义适配器,如`MyAdapter`,并实现其抽象...

    Android自定义adapter的listview

    以上就是关于“Android自定义adapter的listview”的主要知识点。自定义Adapter是Android开发中的核心技能之一,掌握好这一技巧,能帮助我们实现各种复杂的界面效果。通过不断实践和优化,我们可以在保证性能的同时,...

    android demo,baseAdapter的应用

    在创建自定义BaseAdapter时,你需要继承BaseAdapter并实现以上方法。首先,你需要创建一个包含数据的列表,可以是ArrayList或其他集合类型。然后,为每个列表项创建一个布局,并在`getView()`方法中设置相应的数据。...

    android自定义的Adapter--BaseAdapter范例

    总之,自定义BaseAdapter是Android开发中的常见任务,通过它,我们可以将各种复杂的数据结构映射到用户界面,实现动态、丰富的列表展示。理解并熟练运用BaseAdapter对于提升Android开发技能至关重要。

    自定义BaseAdapter

    `BaseAdapter`是Android SDK提供的一种基本的Adapter实现,开发者可以根据自己的需求进行自定义,以适应各种复杂的视图显示需求。本篇文章将深入探讨`BaseAdapter`的工作原理以及如何自定义`BaseAdapter`。 首先,`...

    android baseAdapter的简单封装demo

    BaseAdapter是Android SDK提供的一种通用的适配器,它允许自定义数据模型并将其展示在视图列表中。在未封装的情况下,我们通常需要实现BaseAdapter的以下方法: 1. `getCount()`: 返回数据集的大小。 2. `getItem...

    Android 自定义瀑布流式布局

    通过上述知识点的学习和实践,开发者可以创建一个高效、灵活的Android自定义瀑布流布局。在`app3`这个项目中,我们可以预见到包含了一个自定义的ViewGroup,可能还会有相关的Adapter实现数据绑定,以及图片加载库的...

    Android自定义实现BaseAdapter的优化布局

    本篇文章将深入探讨如何优化自定义BaseAdapter的布局,提高应用的运行效率。 首先,我们来看一个简单的优化案例。在`MainActivity.java`中,我们创建了一个ListView,并通过自定义的`MyAdapter`为其提供数据。`...

    BaseAdapter的使用与优化

    在Android开发中,ListView是展示大量数据常用的组件,而BaseAdapter是它的重要伙伴,用于将数据绑定到ListView的各个Item视图上。本教程通过一个Eclipse下的Android工程实例,详细讲解了BaseAdapter的使用方法以及...

    Android 自定义ImageAdapter 图片左右滑动效果.rar

     实现的原理是 添加一ImageAdapter并设置给Gallery对象,设置一个itemclickListener并Toast被点击图片的位置,然后改写BaseAdapter自定义一ImageAdapter class ,创建ImageAdapter的构造器,取得Gallery属性的Index...

    android自定义下拉刷新上拉加载

    为了实现自定义的下拉刷新和上拉加载,我们需要扩展BaseAdapter或RecyclerView.Adapter,并添加相关逻辑来处理刷新和加载更多事件。 4. **监听器**:在适配器中,你需要实现OnScrollListener接口,监听滚动事件。当...

    Android自定义Adapter适配器

    总之,自定义Adapter是Android开发中的一个重要技能,它允许开发者灵活地控制数据的显示方式,同时提高了应用的可扩展性和可维护性。通过实践和研究这个自定义Adapter的代码,你将能更好地掌握这一核心技术。

    Android自定义控件---联系人列表A-Z排序

    一、Android自定义控件基础 在Android中,自定义控件通常分为两种类型:一是扩展已有的View或ViewGroup类,二是完全自定义的新控件。在这个案例中,我们将扩展ListView或者RecyclerView,因为它们适合用来展示列表...

    Android 自定义ScrollView ListView 体验各种纵向滑动的需求

    这时,我们可以自定义ListView的Adapter,继承自BaseAdapter,重写其中的方法,如getCount、getItem、getView等,以实现自定义的数据绑定和视图渲染。此外,还可以通过设置OnItemClickListener或...

    Android_BaseAdapter_ListView

    `BaseAdapter`是与ListView交互的核心类,它允许我们自定义数据源并将其绑定到ListView上。本教程将深入探讨如何利用BaseAdapter来整合ListView,创建一个动态、可定制的数据展示界面。 首先,`BaseAdapter`是...

Global site tag (gtag.js) - Google Analytics