android自定义adapter(实现对按钮的监听)

我们一般需要自定义adapter   这里就需要继承BaseAdapter

adapter在MVC开发模式中,是控制层

 baseAdapter  继承这个方法必须重写 四个方法

  1.  getcont 方法     这个是返回总记录数

 2. object  getItem 方法  这个方法是返回选项内容

3 .getItemId 方法 这个方法是返回选项内容ID

4.getView 方法 这个方法显示一行行的记录(最重要的方法)



(一) 首先编写xml布局文件

      activity_main.xml

  



    



  ziyuan.xml

  
  
  
      
  
      
          
          
          
                  
          
            
        
        

(二)开始编写自定义的adapter(实现了内容的性能优化)

   myadapter.java

import java.util.List;

import android.content.Context;
import android.content.pm.LabeledIntent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


//自定义适配器
public class MyAdapters extends BaseAdapter {
    private Context mContext;  //定义一个视图
    private List text;
    private List images;
    private List text1;
    private List btn1;
    private int temp;
    
    class ItemViewCache   //内部类  元素的缓冲区
	{
		public TextView mTextView;
		public ImageView mImageView;
		public TextView mTextView2;
		public Button btn1;
	}
    
	public MyAdapters(Context mContext, List text, List images,List text1,List btn1) {
		super();
		this.mContext = mContext;
		this.text = text;
		this.images = images;
		this.btn1=btn1;
		this.text1=text1;
		
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return text.size();
	}

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

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

	//  arg0  相当于position  这个动态的增长
	@Override
	public View getView(final int arg0, View arg1, ViewGroup arg2) {
		// TODO Auto-generated method stub
		
		
		//优化ListView
		if(arg1==null)
		{
			
			arg1=LayoutInflater.from(mContext).inflate(R.layout.ziyuan,null);
			ItemViewCache viewcache=new ItemViewCache();
			
			viewcache.mTextView =(TextView)arg1.findViewById(R.id.Text1); 
			viewcache.mImageView=(ImageView)arg1.findViewById(R.id.Image); 
			viewcache.mTextView2=(TextView)arg1.findViewById(R.id.Text2);
			viewcache.btn1=(Button)arg1.findViewById(R.id.btn1);

		    arg1.setTag(viewcache);
		}
		
	   ItemViewCache cache=(ItemViewCache)arg1.getTag();
	   cache.mTextView.setText(text.get(arg0));
	   cache.mImageView.setImageResource(images.get(arg0));
	   cache.btn1.setText(btn1.get(arg0));
	   cache.mTextView2.setText(text1.get(arg0));
	   
	   cache.btn1.setOnClickListener(new OnClickListener() {
			 
			/* (non-Javadoc)
			 * @see android.view.View.OnClickListener#onClick(android.view.View)
			 */
			@Override
			public void onClick(View view) {
				// TODO Auto-generated method stub
			     //  arg0  相当于position  这个动态的增长   当前操作的第几行
		Toast.makeText(mContext,"你选择的是"+text.get(arg0),Toast.LENGTH_SHORT).show();
			
			}
		});
			
	  
		return arg1;
	}

}
注意:在自定义中适配器,设置对按钮的监听   arg0  相当于position  这个动态的增长表示当前操作的第几行

(三)编写主类MainActvivity.java


import java.util.ArrayList;
import java.util.List;





import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity {
    List text1=new ArrayList();	
	ListView listview=null;
	List text2=new ArrayList();
    List btn1=new ArrayList();
	List list2=new ArrayList();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listview=(ListView)findViewById(R.id.listview);
		
		
		text1.add(0,"画江湖");
		text1.add(1,"画江湖之不良人");
		text1.add(2,"画江湖之灵主");
		text1.add(3,"画江湖之换世门生");
		

		text2.add(0,"主角:小五");
		text2.add(1,"主角:李星云");
		text2.add(2,"主角:百里登风");
		text2.add(3,"主角:念阳枭");
		
		
		
		btn1.add(0,"观看");
		btn1.add(1,"观看");
		btn1.add(2,"观看");
		btn1.add(3,"观看");
		
		list2.add(0,R.drawable.a);
		list2.add(1,R.drawable.b);
		list2.add(2,R.drawable.c);
		list2.add(3,R.drawable.d);
		
		MyAdapters adapter=new MyAdapters(this,text1,list2,text2,btn1);
	     listview.setAdapter(adapter);
	     
	     
	     
	   /*
	     listview.setOnItemClickListener(new OnItemClickListener() {

				@Override
				public void onItemClick(AdapterView arg0, View arg1, int arg2,
						long arg3) {
				Toast.makeText(MainActivity.this,"你选择了",Toast.LENGTH_SHORT).show();		
				}
			
		     
		     });*/
	    
	}

	

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	//public void click1(View view)   //
	//{
		
		
		
  // Toast.makeText(MainActivity.this,"你选择的是"+,Toast.LENGTH_SHORT).show();
	//}
	
	
	
}
注意:在主类中添加对按钮的事件监听,无法实现对标题的动态获取



最后给大家看实现效果

android自定义adapter(实现对按钮的监听)_第1张图片


你可能感兴趣的