自定义适配器接口的使用

安卓开发时,LiseView会经常使用,所以自定义适配器是必须要掌握的。在适配器中,经常会有按钮存在,

会涉及到点击事件等很多功能,如果都在适配器中写的话,会导致适配器很臃肿,而且,有些参数不好传递过来,

所以这时使用接口,会非常方便。

列如:我做了一个简单的手机应用管理,效果如下;

这时“删除按钮“就可以用接口来实现。方法如下:

自定义适配器接口的使用_第1张图片


新建一个接口

public interface Install {
//接口传入的参数要仔细考虑,使用什么传什么
//这里传入两个参数:包名,该应用在listView中的位置。
    void installApp(String appName,int position);
}
 
  

在自定义适配器中:

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.ImageView;
import android.widget.TextView;
import java.util.List;

/**
 * Created by Administrator on 2015/9/30.
 */
public class MyAdapter extends BaseAdapter{
    private List list;
    private Context context;
//声明接口
    private Install install;

//设置set方法,便于获取接口,否则会出现控制针异常。
    public void setInstall(Install install) {
        this.install = install;
    }
    public MyAdapter(List list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override

    public int getCount() {
        return list.size();
    }

    @Override
    public AppInfo getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        HandlerView handlerView=new HandlerView();
       final AppInfo appInfo1=list.get(i);
        if(view==null)
        {
            view= LayoutInflater.from(context).inflate(R.layout.main_list,null);
	//应用名
            handlerView.name=(TextView)view.findViewById(R.id.name);
	//应用版本
handlerView. version=(TextView)view.findViewById(R.id. version) ;
	//应用图片
handlerView. image=(ImageView)view.findViewById(R.id. image) ;
	//删除按钮
            handlerView.delete=(Button)view.findViewById(R.id.deleteBtn);
            view.setTag(handlerView);
        }else {
            handlerView=(HandlerView)view.getTag();
        }
        handlerView.name.setText(appInfo1.appName);
        handlerView.version.setText(appInfo1.versionName);
        handlerView.image.setImageDrawable(appInfo1.appIcon);
	//因为匿名内部类的关系,有些参数有事会传不进去,可以用final 贯穿。
 
  
       final int position=i;//当前点击的Item的位置

        final String packe=appInfo1.packageName;//获取到的应用的包名

	//按钮的点击监听
handlerView. delete.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) {
 
  
	//这里调用接口的方法,并传入参数,就可以在其他Activity实现接口
                install.installApp(packe,position);
            }
        });
        return view;
    }
    public class HandlerView
    {
        private TextView name;
        private TextView version;
        private ImageView image;
        private Button delete;
    }
}
在MainActivity中实现接口,复写接口的方法

public class MainActivity extends Activity implements Install{
    private Listlist=new ArrayList();
    private MyAdapter myAdapter;
    private ListView view;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view=(ListView)findViewById(R.id.listview);
        view.setOnItemClickListener(new ItemCLicker());
	myAdapter=new MyAdapter(list,MainActivity.this);
//给适配器指定接口
	myAdapter.setInstall(MainActivity.this);
}
@Override
//接口中的方法
public void installApp( String appName, int flag) {
    deleteApp(MainActivity.this,appName,0);
}
//删除应用方法
public void deleteApp(String packageName,int tag)
{
//卸载应用:
    Uri uri=Uri.parse("package:"+packageName);
    Intent intent=new Intent(Intent.ACTION_DELETE,uri);
    startActivity(intent);
   //startActivityForResult(intent,tag);也可以使用该方法,删除后可以进行刷新操作
}

你可能感兴趣的:(android开发)