我從Youtube教程中復制了一個回收器視圖的代碼,但它對我來說是行不通的。new View.OnClickListener()是灰色的,Android Studio建議用lambda替換。這是我的代碼與教程中的代碼的唯一區別...... 應用程式運行了,但沒有顯示布局,因為我得到了錯誤資訊E/RecyclerView。沒有附加的配接器;跳過布局.
。我應該怎么做才能解決這個問題?
這是一個配接器。
這是配接器類:
這是配接器類。
package com.example.yourfoodweek;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide.Action.Action.Action.Action。
import java.util.ArrayList;
public class MealsRecViewAdapter extends RecyclerView.Adapter<MealsRecViewAdapter.ViewHolder>{
private static final String TAG = "MealsRecViewAdapter";
private ArrayList <Food> meals = new ArrayList<> ();
私有Context mContext;
public MealsRecViewAdapter(Context mContext) {
this.mContext = mContext;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_meals_list, parent, false) 。
回傳新的ViewHolder(view)。
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder: Called")。
holder.txtName.setText( meals.get(position).getName() )。
Glide.with(mContext)
.asBitmap()
.load( meals.get(position).getImageUrl()
.進入( holder.imgFood)。
holder.parent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v){
Toast.makeText(mContext, meals.get(position).getName() "Selected", Toast.LENGTH_SHORT).show()。
}
});
}
@Override
public int getItemCount() {
return meals.size();
}
public void setMeals(ArrayList<Food> meals) {
this.dates = meals;
notifyDataSetChanged();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private CardView parent;
私有ImageView imgFood;
私有TextView txtName;
public ViewHolder(@NonNull View itemView){
super(itemView);
parent = itemView.findViewById(R.id.parent);
txtName = itemView.findViewById(R.id.txtMealName);
imgFood = itemView.findViewById(R.id.imgFood)。
}
}
}
uj5u.com熱心網友回復:
這兩個問題是完全不同的。第一個問題是建議,意味著如果你不想申請,你可以跳過它。但我不會建議這樣做。
例如:
(不含Lambda)
myButton.setOnClickListener(new View.OnClickListerner(){
覆寫
void onClick(View v) {
//做一些與動作有關的事情
}
});
(with Lambda)
myButton.setOnClickListener(v -> {
//做一些與動作有關的事情
})
對于其他的問題
沒有附加布局管理器:如果你的RecyclerView沒有附加任何LayoutManager,那么它將跳過,因為它不知道如何安排/顯示專案。
一些LayoutManagers:
- 線性布局
- LinearLayoutManager
- GridLayoutManager
- StaggeredGridLayoutManager 。
如果你想創建你自己的LayoutManager,你可以通過擴展類LayoutManager
如何使用它:
....
LinearLayoutManager layoutManager = new LinearLayoutManager();
layoutManager.setOrientation = LinearLayoutManager.HORIZONTAL
myRecyclerViewObj.setLayoutManager(layoutManager)。
....
不附加配接器
類似于沒有布局管理器,當沒有配接器連接到回收器視圖時,這將顯示出來,為此你必須使用setAdapter方法來設定你的配接器
。例如:
....
MealsRecViewAdapter adapter = new MealsRecViewAdapter(this);
myRecyclerViewObj.setAdapter(adapter)。
....
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/313066.html
標籤:
