Android 为什么不是';t';getLayoutFlater()';解决
我想将文本视图从Android 为什么不是';t';getLayoutFlater()';解决,android,layout-inflater,Android,Layout Inflater,我想将文本视图从content\u list\u drink\u details.xml(顶级名称和顶级价格)显示到cart\u layout.xml的适配器。但我的getLayoutInflater()似乎无法解析 我不确定这是否可行,所以我真的需要你们这些专家的帮助 这是我的CartAdapter.java: public class CartAdapter extends RecyclerView.Adapter<CartViewHolder> { privat
content\u list\u drink\u details.xml
(顶级名称和顶级价格)显示到cart\u layout.xml的适配器。
但我的getLayoutInflater()
似乎无法解析
我不确定这是否可行,所以我真的需要你们这些专家的帮助
这是我的CartAdapter.java:
public class CartAdapter extends RecyclerView.Adapter<CartViewHolder> {
private List<Order> listData = new ArrayList<>();
private Context context;
public CartAdapter(List<Order> listData, Context context) {
this.listData = listData;
this.context = context;
}
@Override
public CartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View itemView = inflater.inflate(R.layout.cart_layout,parent,false);
return new CartViewHolder(itemView);
}
@Override
public void onBindViewHolder(CartViewHolder holder, int position) {
TextDrawable drawable = TextDrawable.builder()
.buildRound(""+listData.get(position).getQuantity(), Color.parseColor("#ed008c"));
holder.img_cart_count.setImageDrawable(drawable);
Locale locale = new Locale("ms","MY");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
double price = (Double.parseDouble(listData.get(position).getPrice()))* (Integer.parseInt(listData.get(position).getQuantity()));
holder.txt_price.setText(fmt.format(price));
holder.txt_cart_name.setText(listData.get(position).getProductName());
//Retrieve topping name
LayoutInflater inflater2 = this.getLayoutInflater();
View vi = inflater2.inflate(R.layout.content_list_drink_detail, null);
TextView toppingName = (TextView)vi.findViewById(R.id.toppingSelected);
holder.txt_item_topping.setText(toppingName.getText().toString());
//Retrieve topping price
TextView toppingPrice = (TextView)vi.findViewById(R.id.toppingSelectedPrice);
holder.txt_topping_price.setText(toppingPrice.getText().toString());
}
公共类CartAdapter扩展了RecyclerView.Adapter{
private List listData=new ArrayList();
私人语境;
公共CartAdapter(列表列表数据、上下文){
this.listData=listData;
this.context=上下文;
}
@凌驾
公共CartViewHolder onCreateViewHolder(视图组父级,int-viewType){
LayoutFlater充气机=LayoutFlater.from(上下文);
视图项视图=充气机。充气(R.layout.cart\u布局,父项,false);
返回新的CartViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(CartViewHolder,内部位置){
TextDrawable-drawable=TextDrawable.builder()
.buildRound(“+listData.get(position.getQuantity(),Color.parseColor(“#ed008c”));
holder.img_cart_count.setImageDrawable(可提取);
语言环境=新语言环境(“ms”、“MY”);
NumberFormat fmt=NumberFormat.getCurrencyInstance(语言环境);
double price=(double.parseDouble(listData.get(position.getPrice())*(Integer.parseInt(listData.get(position.getQuantity()));
holder.txt_price.setText(fmt.format(price));
holder.txt\u cart\u name.setText(listData.get(position.getProductName());
//检索顶部名称
LayoutInflater充气器2=这个.getLayoutInflater();
视图vi=充气机2.充气(R.layout.content\u list\u drink\u detail,空);
TextView toppingName=(TextView)vi.findViewById(R.id.toppingSelected);
holder.txt_item_topping.setText(toppingName.getText().toString());
//取回最高价格
TextView toppingPrice=(TextView)vi.findViewById(R.id.toppingSelectedPrice);
holder.txt_topping_price.setText(toppingPrice.getText().toString());
}
这是我的cart_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:cardElevation="4dp"
>
<LinearLayout
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:orientation="horizontal"
android:layout_gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_weight="9"
android:layout_width="0dp"
android:layout_height="wrap_content">
<LinearLayout
android:layout_marginLeft="8dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/cart_item_name"
android:layout_marginLeft="10dp"
android:gravity="center_vertical|start"
android:textAllCaps="true"
android:textStyle="bold"
android:text="Drink 01"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/cart_item_price"
android:layout_marginLeft="10dp"
android:gravity="center_vertical|start"
android:textAllCaps="true"
android:textStyle="italic"
android:text="RM 1.00"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_marginLeft="8dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/cart_item_topping"
android:layout_marginLeft="10dp"
android:gravity="center_vertical|start"
android:textAllCaps="true"
android:textStyle="bold"
android:text="Topping 01"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/cart_item_topping_price"
android:layout_marginLeft="10dp"
android:gravity="center_vertical|start"
android:textAllCaps="true"
android:textStyle="italic"
android:text="RM "
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
<ImageView
android:layout_gravity="center_vertical|end"
android:layout_marginRight="16dp"
android:id="@+id/cart_item_count"
android:layout_width="32dp"
android:layout_height="32dp"
/>
</LinearLayout>
</android.support.v7.widget.CardView>
getLayoutInflater()
只能直接在组件内部使用,这些组件具有自己的上下文
,如活动
,应用程序
等,但片段
没有自己的上下文
解决方案:
在viewHolder
外部声明inflater
并在构造函数内部初始化它,并使用inflater
而不是getLayoutInflater()
Update
:您正在膨胀一个新视图vi
谁是TextView
toppingName
,toppingName
中没有数据,因此它是空的
您可能希望从list
中提取数据,如listData.get(position.getQuantity()
尝试替换:
LayoutInflater inflater2 = this.getLayoutInflater();
与:
LayoutInflater inflater2 = getActivity().getLayoutInflater();
不确定这是什么。GetLayoutFlater();应该这样做,因为类中没有这样的方法。第二,不要在onBindViewHolder中膨胀视图,这应该在onCreateViewHolder中完成。谢谢!它看起来没有错误,但它不会从适配器显示我的TextView。我相信这是另一件需要处理的事情。我将尝试查看它。谢谢again@MariamSyafiqahSaidi我很高兴我能帮上忙,我解决了问题,等等update@MariamSyafiqahSaidi您只需使用
holder.txt_price..
或类似代码,无需膨胀额外的视图,只需确保列表中有数据且CartViewHolder
已正确定义耳朵先生,但我的顶级名称和顶级价格数据不是来自List listData。它们来自布局内容列表中的文本视图_detail@MariamSyafiqahSaidi您有两个选择,或者您应该为包含所有必需VIE的行设置一个布局,或者您需要添加动态视图(如vi
)进入itemView
类中的CartViewHolder
中,只需查看一下,尽管将所有视图放在一个布局中是简单而有效的
// this below code is not needed at all
//LayoutInflater inflater2 = this.getLayoutInflater();
//View vi = inflater2.inflate(R.layout.content_list_drink_detail, null);
//TextView toppingName = (TextView)vi.findViewById(R.id.toppingSelected);
//TextView toppingPrice = (TextView)vi.findViewById(R.id.toppingSelectedPrice);
LayoutInflater inflater2 = this.getLayoutInflater();
LayoutInflater inflater2 = getActivity().getLayoutInflater();