RecyclerView不会显示在导航活动中

时间:2018-03-31 14:56:04

标签: android android-recyclerview

我有导航活动。在文件content.xml中,我有一个recyclerview。如果我在content.xml中放置了一个EditText,则会显示recylerview,但是如果我没有显示它,则不会显示它。 我不需要EditText字段

这是我的代码。

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扩展了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扩展   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;
} }

4 个答案:

答案 0 :(得分:0)

听起来你的约束搞砸了。例如,您的RecyclerView有toBottomOf="@+id/search_text",因此它希望编辑文本显示。

尝试删除EditText,而不是最后一行添加app:layout_constraintTop_toTopOf="parent"

答案 1 :(得分:0)

您的RecyclerView宽度和高度为0dp。

试试这个:

<?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>

答案 2 :(得分:0)

从recyclerview中删除此行 应用程式:layout_constraintTop_toBottomOf = “@ + ID / SEARCH_TEXT”

这是因为你已经给出了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"/>

答案 3 :(得分:0)

setAdapter放在setLayoutManager

之后
相关问题