简体   繁体   English

RecyclerView没有显示在导航活动中

[英]RecyclerView doesnt show in Navigation Activity

I have a navigation activity. 我有一个导航活动。 In the file content.xml I have a recyclerview. 在文件content.xml中,我有一个recyclerview。 If I put an EditText in the content.xml the recylerview is displayed, however if I do not put it it is not displayed. 如果将EditText放在content.xml中,则显示recylerview,但是如果我不放置它,则不显示它。 I do not need the EditText field 我不需要EditText字段

Here are my code. 这是我的代码。

content_navegador.xml content_navegador.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    tools:context="com.example.pablo.pruebasauthproyecto.Activities.Navegador"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/app_bar_navegador">

    <EditText
        android:id="@+id/search_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:hint="Buscar Proyectos..."
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <android.support.v7.widget.RecyclerView
        android:focusable="true"
        android:id="@+id/reciclador"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/search_text" />

</android.support.constraint.ConstraintLayout>

Navegador.java Navegador.java

public class Navegador extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 公共类Navegador扩展了AppCompatActivity,实现了NavigationView.OnNavigationItemSelectedListener {

 public final static String PROYECTO = "proyecto"; private RecyclerView recycler; private FirebaseUser fUsr; private String intereses; private String claveProy; private ArrayList<Proyecto> proyectos = new ArrayList<>(); private ArrayList<String> listaIntereses = new ArrayList<>(); final DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); Recursos r; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_navegador); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); recuperarProyectos (); } private void recuperarInteresesUsuario() { fUsr = FirebaseAuth.getInstance().getCurrentUser(); DatabaseReference interesesRef = ref.child("intereses").child(fUsr.getUid()); interesesRef.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { intereses = dataSnapshot.getValue().toString(); listaIntereses.add(intereses); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } }); } private void verProyecto(Proyecto proyecto) { // Log.d("DEPURACIÓN", proyecto.toString()); Intent intent = new Intent(this, FichaProyecto.class); intent.putExtra(this.PROYECTO, proyecto); startActivity(intent); } private void cargarRecycler() { // Obtener el Recycler recycler = (RecyclerView) findViewById(R.id.reciclador); recycler.setHasFixedSize(true); ProyectosAdapter adapter = new ProyectosAdapter(proyectos); adapter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Log.d("DEPURACIÓN" , "Item Pulsado : " + proyectos.get(recycler.getChildAdapterPosition(view)).getNombre()); Proyecto prosel = proyectos.get(recycler.getChildAdapterPosition(view)); verProyecto(prosel); } }); recycler.setAdapter(adapter); // Usar un administrador para LinearLayout LinearLayoutManager lManager = new LinearLayoutManager(this); recycler.setLayoutManager(lManager); } private void recuperarProyectos () { DatabaseReference proyectosRef = ref.child("proyectos"); Query consProy = proyectosRef.orderByChild("genero"); consProy.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { claveProy = dataSnapshot.getKey(); final Proyecto p = dataSnapshot.getValue(Proyecto.class); for (String inter : listaIntereses) { // Log.d("DEPURACIÓN", inter); if(p.getGenero().equalsIgnoreCase(inter)) { // Log.d("DEPURACIÓN", p.toString()); DatabaseReference recursosRef = ref.child("recursos"); Query consRecursos = recursosRef.orderByChild("idProyecto").equalTo(claveProy); consRecursos.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { r = dataSnapshot.getValue(Recursos.class); // Log.d("DEPURACIÓN","PROYECTO -> " + p.toString()); p.addRecurso(r); // Log.d("DEPURACIÓN", "RECURSOS PROYECTO -> " + p.getRecursos().toString()); proyectos.add(p); // eliminamos elementos repetidos del ArrayList HashSet<Proyecto> hs = new HashSet<>(); hs.addAll(proyectos); proyectos.clear(); proyectos.addAll(hs); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } }); } } } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } }); recuperarInteresesUsuario(); cargarRecycler(); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.navegador, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.crear_proyect) { startActivity(new Intent(Navegador.this, CrearProyecto.class)); } else if (id == R.id.nav_gallery) { } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_manage) { } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } } 

ProyectosAdapter.java ProyectosAdapter.java

public class ProyectosAdapter extends RecyclerView.Adapter implements View.OnClickListener { 公共类ProyectosAdapter扩展了RecyclerView.Adapter实现的View.OnClickListener {

 private List<Proyecto> items; private View.OnClickListener listener; public class ProyectosViewHolder extends RecyclerView.ViewHolder { public ImageView imagen; public TextView nombre; public TextView autor; public TextView genero; public ProyectosViewHolder(View v) { super(v); imagen = (ImageView) v.findViewById(R.id.imagen); nombre = (TextView) v.findViewById(R.id.nombre); autor = (TextView) v.findViewById(R.id.autor); genero = (TextView) v.findViewById(R.id.genero); } } public ProyectosAdapter(List<Proyecto> items) { this.items = items; } @Override public int getItemCount() { return items.size(); } @Override public ProyectosViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.proyectos_card, viewGroup, false); v.setOnClickListener(this); return new ProyectosViewHolder(v); } @Override public void onBindViewHolder(final ProyectosViewHolder viewHolder, int i) { viewHolder.nombre.setText(items.get(i).getNombre()); viewHolder.autor.setText(items.get(i).getAutor()); viewHolder.genero.setText(items.get(i).getGenero()); Context context = viewHolder.imagen.getContext(); Uri uri = Uri.parse(items.get(i).getRecursos().get(0).getRuta()); Picasso.with(context) .load(uri) .resize(355,225) .centerCrop() .into(viewHolder.imagen); } @Override public void onClick(View view) { if(listener != null) listener.onClick(view); } public void setOnClickListener(View.OnClickListener listener) { this.listener = listener; } } 

Sounds like your constraints are messed up. 听起来您的约束已经搞砸了。 For example your RecyclerView have toBottomOf="@+id/search_text" , so it expects that edit text to present. 例如,您的RecyclerView具有toBottomOf="@+id/search_text" ,因此它希望显示该编辑文本。

Try to remove EditText, and instead of that last line add app:layout_constraintTop_toTopOf="parent" . 尝试删除EditText,然后添加app:layout_constraintTop_toTopOf="parent"代替最后一行。

Your RecyclerView width and height is 0dp. 您的RecyclerView宽度和高度为0dp。

Try this: 尝试这个:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/reciclador"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

Remove this line from recyclerview app:layout_constraintTop_toBottomOf="@+id/search_text" 从recyclerview应用程序中删除此行:layout_constraintTop_toBottomOf =“ @ + id / search_text”

This is beacuse you have given top to bottom of edittext.. Change it like this: 这是因为您已将edittext从上到下。.像这样更改它:

<android.support.v7.widget.RecyclerView 
    android:focusable="true" 
    android:id="@+id/reciclador" 
    android:layout_width="0dp" 
    android:layout_height="0dp" 
    android:layout_marginBottom="8dp" 
    android:layout_marginEnd="8dp" android:layout_marginStart="8dp" 
    android:layout_marginTop="8dp" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintEnd_toEndOf="parent" 
    app:layout_constraintStart_toStartOf="parent" 
    app:layout_constraintTop_toTopOf="parent"/>

setAdapter放在setLayoutManager之后

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM