[英]Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()
[英]Intent fails because of Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()
我所擁有的:我有一個帶有酒吧,咖啡店圖像的RecyclerView。 等等
我想要的是:當您單擊這些圖像之一時,我會向您顯示所選位置的信息,但是在您單擊所選圖像的那一刻,應用程序崩潰並顯示此錯誤“嘗試調用虛擬方法' java.lang.String android.content.Context.getPackageName()
我創建Intent的行上的java.lang.String android.content.Context.getPackageName()
'在空對象引用上”。 我已經在尋找這個錯誤,但我正在按照他們所說的去做
我的問題:該如何解決? 拜托,我非常感謝帶有代碼的示例,我還不擅長編程,請先謝謝
我的java課
public class foodAndGo extends AppCompatActivity {
ArrayList<ClaseNueva> listalugares;
RecyclerView recyclerview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_food_and_go);
listalugares = new ArrayList<ClaseNueva>();
recyclerview = (RecyclerView) findViewById(R.id.RecyclerID);
recyclerview.setLayoutManager(new LinearLayoutManager(this));
llenarLugares();
AdapterDatos adapter = new AdapterDatos(foodAndGo.this, listalugares);
recyclerview.setAdapter(adapter);
}
private void llenarLugares() {
listalugares.add(new ClaseNueva("Restaurantes", R.drawable.carnemejor));
listalugares.add(new ClaseNueva("Bares", R.drawable.beers));
listalugares.add(new ClaseNueva("Cafeterías", R.drawable.desayunosmejor));
listalugares.add(new ClaseNueva("Pizzerías", R.drawable.pizzaamejor));
listalugares.add(new ClaseNueva("Favoritos", R.drawable.favoritosmejo));
}
}
我的適配器
public class AdapterDatos extends RecyclerView.Adapter<AdapterDatos.ViewHolder> {
ArrayList<ClaseNueva>listalugares;
Context context;
public AdapterDatos(foodAndGo foodAndGo, ArrayList<ClaseNueva> listalugares) {
this.context = context;
this.listalugares = listalugares;
}
static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {//quizas poner esto en estatic
TextView etiNombre;
ImageView foto;
// Context context;
public ViewHolder(View itemView) {
super(itemView);
// context = itemView.getContext();
etiNombre = (TextView) itemView.findViewById(R.id.idNombre);
foto = (ImageView) itemView.findViewById(R.id.idImagen);
}
void setOnClickListeners(){
foto.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// switch (v.getId()){
// case R.id.idImagen:
// Intent intent = new Intent(context, MapsActivity.class);
// context.startActivity(intent);
// break;
// }
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list,null,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.etiNombre.setText(listalugares.get(position).getNombre());
holder.foto.setImageResource(listalugares.get(position).getFoto());
// holder.setOnClickListeners();
if (position == 0){
holder.foto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myIntent = new Intent(context, MapsActivity.class);
context.startActivity(myIntent);
}
});
}
}
@Override
public int getItemCount() {
return listalugares.size();
}
}
我認為您忘記了通過活動傳遞上下文!
AdapterDatos adapter = new AdapterDatos(foodAndGo.this,listalugares);
在適配器中接收上下文:
public AdapterDatos(Context context , ArrayList<ClaseNueva> listalugares) {
this.context = context;
this.listalugares = listalugares;
}
希望對您有所幫助!
您需要在適配器中獲取上下文。 我有另一個解決方案。 您可以使用以下代碼獲取上下文
context = holder.foto.getContext();
因此,我們將從適配器中的foto組件獲取上下文。 我們試試吧!
更新
您需要將該代碼放在onBindViewHolder及更高版本中
if (position == 0){
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.