android 7.0后butterknife会有一个大坑,导致空指针,绑定不上控件。解决方法:
build.gradle(app)中添加
dependencies {
annotationProcessor'com.jakewharton:butterknife-compiler:10.2.3'
}
添加完是:
dependencies {
implementation 'com.jakewharton:butterknife:10.2.3' annotationProcessor'com.jakewharton:butterknife-compiler:10.2.3'
}
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.R;
import com.example.myapplication.util.AppInfo;
import java.util.List;
import java.util.zip.Inflater;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class AppsAdapter extends RecyclerView.Adapter<AppsAdapter.ViewHolder> {
List<AppInfo>mList;
public AppsAdapter(List<AppInfo>list) {
this.mList = list;
}
static class ViewHolder extends RecyclerView.ViewHolder{
//使用bindview创建布局
@BindView(R.id.tv_name)
TextView tvName;
@BindView(R.id.iv_icon)
ImageView ivIcon;
private String appName;
private String appMainActivity;
private Context mContext;
@OnClick(R.id.iv_icon)
public void onClick(){
//点击了图标,跳转到相应的app内
ComponentName componentName = new ComponentName(appName, appMainActivity);
Intent intent = new Intent();
intent.setComponent(componentName);
mContext.startActivity(intent);
}
public ViewHolder(@NonNull View itemView, Context context) {
super(itemView);
//注意第一个参数传入this
ButterKnife.bind(this, itemView);
mContext = context;
}
public void convertData(List<AppInfo>list, int position){
appName = list.get(position).getPackageName();
appMainActivity = list.get(position).getMainActivity();
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//加载布局
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.apps_item, parent,false);
ViewHolder viewHolder = new ViewHolder(view, parent.getContext());
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//绑定数据
AppInfo appInfo = mList.get(position);
holder.tvName.setText(appInfo.getAppName());
holder.ivIcon.setImageDrawable(appInfo.getAppIcon());
holder.convertData(mList, position);
}
@Override
public int getItemCount() {
return mList.size();
}
}
在activity里面调用
private void initView() {
appsAdapter = new AppsAdapter(appInfos);
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.HORIZONTAL); laucherRecyclerView.setLayoutManager(layoutManager); laucherRecyclerView.setAdapter(appsAdapter); }