gpt4 book ai didi

java - 获取选定的回收 View 的文本(使用 FireBase)

转载 作者:行者123 更新时间:2023-12-02 00:31:59 24 4
gpt4 key购买 nike

我正在尝试从 fragment 中的 recyclerview 项目中获取一些文本。 recyclerview 从 Firebase 获取数据并将其存储在列表中,然后将所有项目添加到 recyclerview。

我想要发生的是,当我单击回收器 View 中任何项目的卡片 View 中的按钮时,我会在所选选项中获得相应的文本值。

我的代码:

public class Products extends Fragment {

private FirebaseRecyclerAdapter adapter;
public RecyclerView productRecyclerView;
ImageButton btnPopupMenu;
String key, keyholder;
TextView productName, productNameHolder;
int position;


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_products, container, false);

productRecyclerView = (RecyclerView) rootView.findViewById(R.id.rvProducts);
productRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

final FloatingActionButton btnAddProd = rootView.findViewById(R.id.btnAddProduct);
final FloatingActionButton btnSearchProd = rootView.findViewById(R.id.fabSearchProduct);
final FloatingActionButton btnRetract = rootView.findViewById(R.id.fabMainRetract);
final FloatingActionButton btnMain = rootView.findViewById(R.id.fabMain);

btnAddProd.hide();
btnSearchProd.hide();
btnRetract.hide();

btnMain.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
btnAddProd.show();
btnSearchProd.show();
btnRetract.show();
btnMain.hide();
}
});

btnRetract.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
btnAddProd.hide();
btnSearchProd.hide();
btnMain.show();
btnRetract.hide();
}
});

productRecyclerView.setHasFixedSize(true);
fetch();

return rootView;
}

public class ViewHolder extends RecyclerView.ViewHolder {
public TextView productType;
public TextView productID;
public TextView productName;
public LinearLayout rootProduct;
public ImageButton btnPopupMenu;

public ViewHolder(View itemView) {
super(itemView);

rootProduct = itemView.findViewById(R.id.list_rootProducts);
productName = itemView.findViewById(R.id.list_productName);
productType = itemView.findViewById(R.id.list_productType);
productID = itemView.findViewById(R.id.list_productID);
btnPopupMenu = itemView.findViewById(R.id.ib_popup_menu);
productNameHolder = itemView.findViewById(R.id.tvHolder);

position = getAdapterPosition();
Toast.makeText(getContext(), "Position is: "+position, Toast.LENGTH_SHORT).show();

}

public void setProductName(String string) {

productName.setText(string);
}

public void setProductType(String string) {

productType.setText(string);
}

public void setProductID(String string) {

productID.setText(string);
}

}

public interface RecyclerViewClickListener {
public void recyclerViewListClicked(View v, int position);
}


private void fetch() {
Query query = FirebaseDatabase.getInstance().getReference().child("PRODUCTS");

final FirebaseRecyclerOptions<ProductDetails> options =
new FirebaseRecyclerOptions.Builder<ProductDetails>()
.setQuery(query, new SnapshotParser<ProductDetails>() {
@NonNull
@Override
public ProductDetails parseSnapshot(@NonNull DataSnapshot snapshot) {
return new ProductDetails
(snapshot.child("Product_Name").getValue().toString(),
snapshot.child("Product_Type").getValue().toString(),
snapshot.child("Product_ID").getValue().toString());
}
})
.build();

adapter = new FirebaseRecyclerAdapter<ProductDetails, ViewHolder>(options) {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_products, parent, false);


return new ViewHolder(view);
}


@Override
protected void onBindViewHolder(final ViewHolder holder, final int position, final ProductDetails model) {
holder.setProductName(model.getProductName());
holder.setProductType(model.getProductType());
holder.setProductID(model.getProductID());

holder.btnPopupMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu pm = new PopupMenu(getContext(), view);


pm.getMenuInflater().inflate(R.menu.popup_menu, pm.getMenu());
pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
case R.id.menu_edit_product:

return true;

case R.id.menu_delete_product:
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("DELETE Product");
builder.setMessage("You are about to delete the selected product. Continue?");
builder.setCancelable(false);
builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});

builder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
});
builder.show();

return true;
}

return true;
}
});
pm.show();
}
});
}
};
productRecyclerView.setAdapter(adapter);
}

@Override
public void onStart() {
super.onStart();
adapter.startListening();
}

@Override
public void onStop() {
super.onStop();
adapter.stopListening();
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//you can set the title for your toolbar here for different fragments different titles
getActivity().setTitle("Products");
}
}

我的主要目标只是获取“Product_Name”的文本,并将其设置在测试 TextView 中,以检查我是否获得了所选回收 View 项目的正确产品名称。

我将使用该文本从 Firebase 数据库引用其 key ,并允许编辑和删除功能正常工作。

最佳答案

您应该将一个接口(interface)传递给您的 ViewHolder 并处理持有者外部的所有对话框 UI/逻辑。只需点击支架,然后在点击的位置上触发界面中的功能即可。在 onBind 中设置此 clickListener。当您声明接口(interface)实现(例如 fragment )时,通过在获取的列表中查找正确的产品及其位置来获取产品的所有信息,并显示带有信息的对话框。你明白我的意思吗?您甚至可以在另一个类中创建对话框。在 VH 内创建对话框不是一个好习惯......我不明白你为什么这样做:在 VH 构造函数中 position = getAdapterPosition(); ? recyclerView的目标是复用VH,所以VH创建时的位置就没用了……

关于java - 获取选定的回收 View 的文本(使用 FireBase),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58006537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com