Android 安卓回收视图中的OnClick对我不起作用吗?
我在Android Studio中制作一个应用程序,在firebase中保存产品信息,我的问题是我使用的recyclerview显示firebase实时数据库中的食品,当单击某个项目时,它必须将该项目的数据传递给某个editText,虽然目前我只想让它向我展示一个带有产品名称的祝酒词,但当我按下该项时,什么都没有发生。 我按照教程为RecyclerView创建了带有适配器的OnClick,它以前在另一个项目中对我有用,但这次不行 RecylcerView适配器:Android 安卓回收视图中的OnClick对我不起作用吗?,android,android-recyclerview,onclick,Android,Android Recyclerview,Onclick,我在Android Studio中制作一个应用程序,在firebase中保存产品信息,我的问题是我使用的recyclerview显示firebase实时数据库中的食品,当单击某个项目时,它必须将该项目的数据传递给某个editText,虽然目前我只想让它向我展示一个带有产品名称的祝酒词,但当我按下该项时,什么都没有发生。 我按照教程为RecyclerView创建了带有适配器的OnClick,它以前在另一个项目中对我有用,但这次不行 RecylcerView适配器: public class Ada
public class AdapterDatos extends RecyclerView.Adapter<AdapterDatos.ViewHolderDatos>
implements View.OnClickListener{
ArrayList<Producto> listDatos;
private View.OnClickListener listener;
public AdapterDatos(ArrayList<Producto> listDatos) {
this.listDatos = listDatos;
}
// CONNECT THE LAYOUT WITH THE ADAPTER
@NonNull
@Override
public ViewHolderDatos onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_producto_grid,null,false);
view.setOnClickListener(this);
return new ViewHolderDatos(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolderDatos holder, int position) {
holder.nombre_list.setText(listDatos.get(position).getNombre());
holder.tipo_list.setText(listDatos.get(position).getTipo());
holder.valor_list.setText(listDatos.get(position).getValor());
Glide
.with(holder.imagen_list.getContext())
.load(Producto.getImageUri())
.into(holder.imagen_list);
}
// GET THE LIST SIZE
@Override
public int getItemCount() {
return listDatos.size();
}
public void setOnClickListener(View.OnClickListener listener){
this.listener = listener;
}
@Override
public void onClick (View view){
if (listener!=null){
listener.onClick(view);
}
}
public class ViewHolderDatos extends RecyclerView.ViewHolder {
ImageView imagen_list;
TextView nombre_list, tipo_list, valor_list;
public ViewHolderDatos(@NonNull View itemView) {
super(itemView);
imagen_list = (ImageView) itemView.findViewById(R.id.imagen_producto_list);
nombre_list = (TextView) itemView.findViewById(R.id.nombre_producto_list);
tipo_list = (TextView) itemView.findViewById(R.id.tipo_producto_list);
valor_list = (TextView) itemView.findViewById(R.id.valor_producto_list);
}
}
公共类AdapterDatos扩展了RecyclerView.Adapter
实现View.OnClickListener{
ArrayList listDatos;
private View.OnClickListener监听器;
公共适配器(ArrayList listDatos){
this.listDatos=listDatos;
}
//将布局与适配器连接
@非空
@凌驾
public ViewHolderDatos onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.布局.产品网格项,空,假);
view.setOnClickListener(这个);
返回新的ViewHolderDatos(视图);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolderDatos holder,int位置){
holder.nombre_list.setText(listDatos.get(position.getNombre());
holder.tipo_list.setText(listDatos.get(position.getTipo());
holder.valor_list.setText(listDatos.get(position.getValor());
滑行
.with(holder.imagen_list.getContext())
.load(Producto.getImageUri())
.进入(持有人图像列表);
}
//获取列表大小
@凌驾
public int getItemCount(){
返回listDatos.size();
}
public void setOnClickListener(View.OnClickListener侦听器){
this.listener=listener;
}
@凌驾
公共void onClick(视图){
if(侦听器!=null){
onClick(视图);
}
}
公共类ViewHolderDatos扩展了RecyclerView.ViewHolder{
ImageView imagen_列表;
TextView nombre_列表、tipo_列表、valor_列表;
public ViewHolderDatos(@NonNull View itemView){
超级(项目视图);
imagen_列表=(ImageView)itemView.findViewById(R.id.imagen_producto_列表);
nombre_list=(TextView)itemView.findViewById(R.id.nombre_producto_list);
tipo_list=(TextView)itemView.findViewById(R.id.tipo_producto_list);
valor_列表=(TextView)itemView.findViewById(R.id.valor_producto_列表);
}
}
}
这是片段的代码:
public static CreateFragment newInstance() {
return new CreateFragment();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.create_fragment, container, false);
imagenProduct = (ImageView) view.findViewById(R.id.p_Imagen);
btnCrear = (ImageButton) view.findViewById(R.id.p_crear);
btnImagen = (ImageButton) view.findViewById(R.id.p_galeria);
btnLimpiar = (ImageButton) view.findViewById(R.id.p_cancelar);
btnActualizar = (ImageButton) view.findViewById(R.id.p_actualizar);
txvErrorImagen = (TextView) view.findViewById(R.id.p_errorImagen);
txvErrorNombre = (TextView) view.findViewById(R.id.p_errorName);
txvErrorDescrip = (TextView) view.findViewById(R.id.p_errorDescrip);
txvErrorValor = (TextView) view.findViewById(R.id.p_errorValor);
etNombre = (EditText) view.findViewById(R.id.p_Name);
etDescrip = (EditText) view.findViewById(R.id.p_descrip);
etValor = (EditText) view.findViewById(R.id.p_valor);
spTipo = (Spinner) view.findViewById(R.id.spinner_producto);
spList = (Spinner) view.findViewById(R.id.sp_list);
rcvList = (RecyclerView) view.findViewById(R.id.rcv_productos);
//ADAPTER SPINNER
String[] product = {"EMPANADA", "BEBIDA", "COMBO", "INSUMOS", "OTROS"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_item_tipo, product);
spTipo.setAdapter(adapter);
spList.setAdapter(adapter);
btnActualizar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listarDatos();
}
});
btnLimpiar.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
ClearBox();
}
});
btnImagen.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
cargarImagen();
}
});
btnCrear.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Verificar();
}
});
inicializarFirebase();
construirRecycler();
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = new ViewModelProvider(this).get(CreateViewModel.class);
// TODO: Use the ViewModel
}
// START FIREBASE
private void inicializarFirebase() {
FirebaseApp.initializeApp(getContext());
database = FirebaseDatabase.getInstance();
dataref = database.getReference();
storageref = FirebaseStorage.getInstance().getReference();
Glide.with(getActivity())
.load(R.drawable.imagen_splash)
.fitCenter()
.into(imagenProduct);
}
// LIST DATA
private void listarDatos() {
tipoList = spList.getSelectedItem().toString();
dataref.child("Productos").child(tipoList).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
listProductos.clear();
for (DataSnapshot objSnapshot: dataSnapshot.getChildren()){
Producto p = objSnapshot.getValue(Producto.class);
listProductos.add(p);
AdapterDatos adapter = new AdapterDatos(listProductos);
rcvList.setAdapter(adapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
// CREATE RECYCLERVIEW IN THIS PART I THINK THIS IS THE ERROR
private void construirRecycler(){
listProductos = new ArrayList<Producto>();
//rcvList.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false));
rcvList.setLayoutManager(new GridLayoutManager(getActivity(), 2));
listarDatos();
AdapterDatos adapter = new AdapterDatos(listProductos);
adapter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity(), "Nombre: "+listProductos
.get(rcvList.getChildAdapterPosition(view)).getTipo(), Toast.LENGTH_LONG).show();
}
});
rcvList.setAdapter(adapter);
}
// UPLOAD GALLERY IMAGE
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode==RESULT_OK){
path= data.getData();
Glide.with(getActivity())
.load(path)
.fitCenter()
.into(imagenProduct);
imagenProduct.setImageURI(path);
txvErrorImagen.setVisibility(View.GONE);
imagenB = true;
}else{
Toast.makeText(getActivity(), "Imagen No Valida", Toast.LENGTH_SHORT).show();
txvErrorImagen.setVisibility(View.VISIBLE);
imagenB = false;
}
}
// OPEN GALLERY
private void cargarImagen() {
Intent cargarInt= new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
cargarInt.setType("image/");
startActivityForResult(cargarInt.createChooser(cargarInt,"Seleccione la Aplicación"),10);
}
// BTN ACTION CLEAR DATA FIELDS
public void ClearBox() {
etNombre.setText("");
etDescrip.setText("");
etValor.setText("");
spTipo.setSelection(0);
txvErrorImagen.setVisibility(View.GONE);
txvErrorNombre.setVisibility(View.GONE);
txvErrorDescrip.setVisibility(View.GONE);
txvErrorValor.setVisibility(View.GONE);
path = null;
downloadUri = null;
downloadURL = "";
Glide.with(getActivity())
.load(R.drawable.imagen_splash)
.fitCenter()
.into(imagenProduct);
}
// SAVE DATA WITH IMAGE
private void crear() {
Producto p = new Producto();
p.setUid(UUID.randomUUID().toString());
p.setNombre(nombreP);
p.setDescrip(descripP);
p.setValor("$"+valorP);
p.setTipo(spProducto);
p.setImageUri(downloadURL);
dataref.child("Productos").child(spProducto).child(p.getUid()).setValue(p);
Toast.makeText(getActivity(), "Producto Creado", Toast.LENGTH_LONG).show();
}
// IMAGE TO STORAGE
public void Storage() {
final StorageReference filePath = storageref.child("Productos").child(path.getLastPathSegment());
Task<Uri> uploadTask = filePath.putFile(path).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
return filePath.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()){
downloadUri = task.getResult();
downloadURL = downloadUri.toString();
Toast.makeText(getActivity(), "Imagen guardada", Toast.LENGTH_SHORT).show();
crear();
}else{
Toast.makeText(getActivity(), "Error al Subir la Imagen", Toast.LENGTH_LONG).show();
}
}
});
}
// ACTION CHECK VALIDITY FIELDS
private void Verificar() {
nombreP = etNombre.getText().toString();
descripP = etDescrip.getText().toString();
valorP = etValor.getText().toString();
spProducto = spTipo.getSelectedItem().toString();
int correcto = 0;
if (nombreP.equals("")) {
txvErrorNombre.setVisibility(View.VISIBLE);
} else {
txvErrorNombre.setVisibility(View.GONE);
correcto++;
}
if (descripP.equals("")) {
txvErrorDescrip.setVisibility(View.VISIBLE);
} else {
txvErrorDescrip.setVisibility(View.GONE);
correcto++;
}
if (valorP.equals("")) {
txvErrorValor.setVisibility(View.VISIBLE);
} else {
txvErrorValor.setVisibility(View.GONE);
correcto++;
}
if (imagenProduct.getDrawable() != null ){
txvErrorImagen.setVisibility(View.GONE);
correcto++;
}else{
txvErrorImagen.setVisibility(View.VISIBLE);
}
if (imagenB = true) {
txvErrorImagen.setVisibility(View.GONE);
correcto++;
}
if (correcto == 5) {
Storage();
ClearBox();
}
}
publicstaticcreatefragmentnewinstance(){
返回新的CreateFragment();
}
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater充气机,@null可查看组容器,
@可为空的捆绑包savedInstanceState){
视图=充气机。充气(R.layout.create_碎片,容器,false);
imagenProduct=(ImageView)view.findViewById(R.id.p_Imagen);
btnCrear=(ImageButton)view.findViewById(R.id.p_crear);
btnImagen=(ImageButton)view.findViewById(R.id.p_galeria);
btnLimpiar=(ImageButton)view.findViewById(R.id.p_cancelar);
btnActualizar=(ImageButton)view.findViewById(R.id.p_);
txvErrorImagen=(TextView)view.findViewById(R.id.p_errorImagen);
txvErrorNombre=(TextView)view.findViewById(R.id.p_errorName);
txverrorsdescripp=(TextView)view.findViewById(R.id.p_errordescripp);
txvErrorValor=(TextView)view.findViewById(R.id.p_errovalor);
etNombre=(EditText)view.findViewById(R.id.p_名称);
etdescripp=(EditText)view.findViewById(R.id.p\u descripp);
etValor=(EditText)view.findViewById(R.id.p_valor);
spTipo=(微调器)view.findViewById(R.id.Spinner\u producto);
spList=(微调器)view.findViewById(R.id.sp_列表);
rcvList=(RecyclerView)view.findViewById(R.id.rcv_productos);
//适配器微调器
String[]product={“EMPANADA”、“BEBIDA”、“COMBO”、“INSUMOS”、“OTROS”};
ArrayAdapter=新的ArrayAdapter(getActivity(),R.layout.spinner\u item\u tipo,product);
spTipo.setAdapter(适配器);
spList.setAdapter(适配器);
btnActualizar.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
listarDatos();
}
});
btnLimpiar.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
ClearBox();
}
});
btnImagen.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
cargarImagen();
}
});
btnCrear.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
验证汽车();
}
});
inicializarFirebase();
construirRecycler();
返回视图;
}
@凌驾
ActivityCreated上的公共无效(@Nullable Bundle savedinStateCState){
super.onActivityCreated(savedInstanceState);
mViewModel=newviewmodelprovider(this.get)(CreateViewModel.class);
//TODO:使用ViewModel
}
//启动火基
private void inicializarFirebase()中的{
FirebaseApp.initializeApp(getContext());
database=FirebaseDatabase.getInstance();
dataref=database.getReference();
storageref=FirebaseStorage.getInstance().getReference();
Glide.with(getActivity())
.负载(R.可牵引.图像飞溅)
.fitCenter()
。输入(图像产品);
}
//列表数据
私有无效列表(){
tipoList=spList.getSelectedItem().toString();
dataref.child(“Productos”).child(tipoList).addValueEventListener(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
listProductos.clear();
对于(DataSnapshot objSnapshot:DataSnapshot.getChildren()){
Producto p=objSnapshot.getValue(Producto.class);
添加(p);
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ui.createProduct.CreateFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/p_LinearL"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="4dp">
<TextView
android:id="@+id/p_Titulo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/bevan"
android:gravity="center_horizontal|top"
android:text="@string/titulo_productos"
android:textColor="@color/colorAccent"
android:textSize="24sp" />
<LinearLayout
android:id="@+id/p_LinearL_Botones"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
android:orientation="horizontal">
<ImageButton
android:id="@+id/p_crear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_weight="1"
android:background="@drawable/b_circular_amarillo"
android:contentDescription="@string/crear_productos"
android:tint="@color/black"
app:srcCompat="@drawable/ic_baseline_save_24" />
<ImageButton
android:id="@+id/p_galeria"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_weight="1"
android:background="@drawable/b_circular_amarillo"
android:contentDescription="@string/galeria_productos"
android:tint="@color/black"
app:srcCompat="@drawable/ic_menu_camera" />
<ImageButton
android:id="@+id/p_cancelar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:background="@drawable/b_circular_amarillo"
android:contentDescription="@string/limpiar_productos"
android:tint="@color/black"
app:srcCompat="@drawable/ic_cerrar" />
</LinearLayout>
<TextView
android:id="@+id/p_errorImagen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/errorImagen_productos"
android:textColor="@color/colorRojoError"
android:textSize="14sp"
android:visibility="gone" />
<ImageView
android:id="@+id/p_Imagen"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="clip_horizontal|center_horizontal"
android:layout_marginTop="12dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:contentDescription="@string/descripImagen_productos"
/>
<ImageView
android:id="@+id/p_separador"
android:layout_width="match_parent"
android:layout_height="5dp"
android:contentDescription="@string/imagen"
android:scaleType="fitXY"
android:src="@android:drawable/divider_horizontal_bright" />
<TextView
android:id="@+id/p_errorName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/errorNombre_productos"
android:textColor="@color/colorRojoError"
android:textSize="14sp"
android:visibility="gone" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/p_inputName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:id="@+id/p_Name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/nombre_productos"
android:importantForAutofill="no"
android:inputType="textPersonName"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/p_errorDescrip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/errorDescrip_productos"
android:textColor="@color/colorRojoError"
android:textSize="14sp"
android:visibility="gone" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/p_inputDescrip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:id="@+id/p_descrip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:gravity="start|top"
android:hint="@string/description_productos"
android:importantForAutofill="no"
android:inputType="textMultiLine" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/p_errorValor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/errorValor_productos"
android:textColor="@color/colorRojoError"
android:textSize="14sp"
android:visibility="gone" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Spinner
android:id="@+id/spinner_producto"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/p_inputValor"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<EditText
android:id="@+id/p_valor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:gravity="start|top"
android:hint="@string/valor_productos"
android:importantForAutofill="no"
android:inputType="text|number" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/p_lista"
android:layout_width="340dp"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:fontFamily="@font/bevan"
android:gravity="center_horizontal|top"
android:text="@string/lista_productos"
android:textColor="@color/white"
android:textSize="26sp" />
<ImageButton
android:id="@+id/p_actualizar"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="4dp"
android:layout_weight="1"
android:background="@color/colorAccent"
android:contentDescription="@string/actualizar_productos"
android:tint="@color/white"
app:srcCompat="@drawable/ic_baseline_reload" />
</LinearLayout>
<Spinner
android:id="@+id/sp_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:foregroundGravity="center" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rcv_productos"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</FrameLayout>
Toast.makeText(getContext(), "Nombre: "+listProductos
.get(rcvList.getChildAdapterPosition(view)).getTipo(), Toast.LENGTH_LONG).show();
}