自定义适配器接口的使用

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

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

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

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

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


新建一个接口

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<AppInfo> list;
    private Context context;
//声明接口
    private Install install;

//设置set方法,便于获取接口,否则会出现控制针异常。
    public void setInstall(Install install) {
        this.install = install;
    }
    public MyAdapter(List<AppInfo> 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 List<AppInfo>list=new ArrayList<AppInfo>();
    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);也可以使用该方法,删除后可以进行刷新操作
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值