【问题标题】:No adapter attached; skipping layout from RecycleView未连接适配器;从 RecycleView 跳过布局
【发布时间】:2017-02-10 18:57:32
【问题描述】:

我尝试了一些在此网站上发布的解决方案来解决我遇到的错误,但没有人帮助我。 我明白了:

RecyclerView:没有附加适配器;跳过布局

我要显示的 RecycleView 也是空的。 这是我的代码:

CardAdapter.java

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.CartaViewHolder> {

private Context mainContext;
private  List<DBPronosticos> items;

public CardAdapter(List<DBPronosticos> items, Context contexto) {
    this.mainContext = contexto;
    this.items = items;
}

class CartaViewHolder extends RecyclerView.ViewHolder{
    public TextView tipster;
    public TextView fecha;
    public TextView apuesta;
    public TextView cuota;
    public TextView resultado;
    public TextView pronostico;
    public TextView encuentro;


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

        tipster = (TextView) itemView.findViewById(R.id.tipsterpronostico);
        fecha = (TextView) itemView.findViewById(R.id.fechapronostico);
        apuesta = (TextView) itemView.findViewById(R.id.dineropronostico);
        cuota = (TextView) itemView.findViewById(R.id.multiplicadorpronostico);
        resultado = (TextView) itemView.findViewById(R.id.elresultado);
        pronostico = (TextView) itemView.findViewById(R.id.elpronostico);
        encuentro = (TextView) itemView.findViewById(R.id.elencuentro);

    }
}
/**
 * creamos la card o targeta
 * @param viewGroup
 * @param viewType
 * @return
 */
@Override
public CartaViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {

    View v = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.pronostico, viewGroup, false);

    return new CartaViewHolder(v);
}

/**
 * Este metodo actualiza el RecyclerView.ViewHolder
 * @param viewHolder
 * @param position
 */
@Override
public void onBindViewHolder(CartaViewHolder viewHolder, int position) {
    DBPronosticos item = items.get(position);
    viewHolder.itemView.setTag(item);
    viewHolder.tipster.setText(item.getNombre_tipster());
    viewHolder.fecha.setText(item.getFecha());
    viewHolder.apuesta.setText(String.valueOf(item.getCantidad_apuesta()));
    viewHolder.cuota.setText(String.valueOf(item.getCuota()));
    viewHolder.resultado.setText("???");
    viewHolder.pronostico.setText(item.getApuesta());
    viewHolder.encuentro.setText(item.getEncuentro());


}

@Override
public int getItemCount() {
    return items.size();
}


}

Pronosticos.java

public class Pronosticos extends Fragment {
ActionBar actionBar;
private AdView mAdView;
private List<DBPronosticos> listaItemsCursos;
private RecyclerView.LayoutManager lManager;
private RecyclerView recycler;
private CardAdapter adapter;
DataBase managerCurso;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    // Inflate the layout for this fragment

    return inflater.inflate(R.layout.fragment_pronosticos, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Toolbar toolbar = (android.support.v7.widget.Toolbar) view.findViewById(R.id.toolbar);
((MainActivity)getActivity()).setSupportActionBar(toolbar);
actionBar = ((MainActivity)getActivity()).getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_dehaze_black_24dp, null);
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, Color.WHITE);
actionBar.setHomeAsUpIndicator(drawable);
actionBar.setHomeAsUpIndicator(drawable);
((MainActivity) getActivity()).getSupportActionBar().setTitle("Pronosticos");
final FloatingActionMenu fab = (FloatingActionMenu) view.findViewById(R.id.actividadpronosticos);
fab.setClosedOnTouchOutside(true);
FloatingActionButton tip = (FloatingActionButton) view.findViewById(R.id.pronostico);
tip.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent i = new Intent((MainActivity) getActivity(), AddPick.class);
        startActivity(i);
    }
});
managerCurso = new DataBase((MainActivity)getActivity());
listaItemsCursos = managerCurso.getCursosList();
// Obtener el Recycler
recycler = (RecyclerView) view.findViewById(R.id.reciclador);
recycler.setHasFixedSize(true);
// Usar un administrador para LinearLayout
lManager = new LinearLayoutManager((MainActivity)getActivity());
recycler.setLayoutManager(lManager);
// Crear un nuevo adaptador
adapter = new CardAdapter(listaItemsCursos, (MainActivity)getActivity());
recycler.setAdapter(adapter);
recycler.setItemAnimator(new DefaultItemAnimator());


}
}

pronostico.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="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:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:orientation="vertical">

<android.support.v7.widget.CardView
    android:id="@+id/card2"
    android:layout_width="match_parent"
    android:layout_height="200dp">

    <RelativeLayout
        android:background="@drawable/shape"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <ImageView
        android:id="@+id/txt1"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:padding="10dp"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_action_name"
        android:text="Tipster" />

        <TextView
            android:text="Tipster"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tipsterpronostico"
            android:layout_marginBottom="11dp"
            android:layout_alignBottom="@+id/txt1"
            android:layout_toRightOf="@+id/txt1"
            android:layout_toEndOf="@+id/txt1" />

        <TextView
            android:text="Fecha"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/tipsterpronostico"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_marginRight="25dp"
            android:layout_marginEnd="25dp"
            android:id="@+id/fechapronostico" />

        <TextView
            android:text="Apuesta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="48dp"
            android:id="@+id/apuestapronostico"
            android:layout_alignRight="@+id/tipsterpronostico"
            android:layout_alignEnd="@+id/tipsterpronostico" />

        <TextView
            android:layout_width="120dp"
            android:gravity="center"
            android:textSize="17dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="22dp"
            android:id="@+id/dineropronostico"
            android:text="300€"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <TextView
            android:text="Cuota"
            android:textStyle="bold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/cuotapronostico"
            android:layout_alignBaseline="@+id/apuestapronostico"
            android:layout_alignBottom="@+id/apuestapronostico"
            android:layout_centerHorizontal="true" />

        <TextView
            android:text="Pronóstico"
            android:textStyle="bold"
            android:gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tipsterpronostico"
            android:id="@+id/elpronostico"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_above="@+id/elencuentro" />

        <TextView
            android:text="Encuentro"
            android:gravity="center"
            android:layout_width="wrap_content"
            android:id="@+id/elencuentro"
            android:layout_height="40dp"
            android:layout_above="@+id/apuestapronostico"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />

        <TextView
            android:text="5.0"
            android:gravity="center"
            android:layout_height="wrap_content"
            android:id="@+id/multiplicadorpronostico"
            android:layout_width="120dp"
            android:layout_alignTop="@+id/dineropronostico"
            android:layout_centerHorizontal="true" />

        <TextView
            android:text="Resultado"
            android:layout_width="wrap_content"
            android:gravity="center"
            android:textStyle="bold"
            android:layout_height="wrap_content"
            android:id="@+id/resultadopronostico"
            android:layout_alignBaseline="@+id/cuotapronostico"
            android:layout_alignBottom="@+id/cuotapronostico"
            android:layout_alignRight="@+id/fechapronostico"
            android:layout_alignEnd="@+id/fechapronostico"
            android:layout_toRightOf="@+id/multiplicadorpronostico"
            android:layout_toEndOf="@+id/multiplicadorpronostico" />

        <TextView
            android:text="-300€"
            android:layout_width="wrap_content"
            android:gravity="center"
            android:layout_height="wrap_content"
            android:id="@+id/elresultado"
            android:layout_alignBaseline="@+id/multiplicadorpronostico"
            android:layout_alignBottom="@+id/multiplicadorpronostico"
            android:layout_alignRight="@+id/resultadopronostico"
            android:layout_alignEnd="@+id/resultadopronostico"
            android:layout_toRightOf="@+id/multiplicadorpronostico"
            android:layout_toEndOf="@+id/multiplicadorpronostico" />

    </RelativeLayout>
</android.support.v7.widget.CardView>

</LinearLayout>

fragment_pronosticos.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent">
<RelativeLayout
    android:layout_width="match_parent"
    android:id="@+id/relativo"
    android:layout_height="56dp">

    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/toolbar"
        android:layout_height="match_parent"
        popupTheme="@style/ToolbarTheme"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary" />

</RelativeLayout>
<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/reciclador"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="3dp"
    android:scrollbars="vertical"
    android:layout_below="@+id/relativo" />
<com.github.clans.fab.FloatingActionMenu
    android:id="@+id/actividadpronosticos"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_marginBottom="20dp"
    android:layout_marginLeft="11dp"
    android:layout_marginRight="11dp"
    fab:menu_animationDelayPerItem="55"
    fab:menu_backgroundColor="@android:color/transparent"
    fab:menu_buttonSpacing="0dp"
    fab:menu_colorNormal="#da3c2f"
    fab:menu_colorPressed="#dc4b3f"
    fab:menu_colorRipple="#99d4d4d4"
    fab:menu_fab_size="normal"
    fab:menu_icon="@drawable/fab_add"
    fab:menu_labels_colorNormal="#333"
    fab:menu_labels_colorPressed="#444"
    fab:menu_labels_colorRipple="#66efecec"
    fab:menu_labels_cornerRadius="3dp"
    fab:menu_labels_ellipsize="none"
    fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
    fab:menu_labels_margin="0dp"
    fab:menu_labels_maxLines="-1"
    fab:menu_labels_padding="8dp"
    fab:menu_labels_position="left"
    fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
    fab:menu_labels_showShadow="true"
    fab:menu_labels_singleLine="false"
    fab:menu_labels_textColor="#f2f1f1"
    fab:menu_labels_textSize="15sp"
    fab:menu_openDirection="up"
    fab:menu_shadowRadius="4dp"
    fab:menu_shadowXOffset="1dp"
    fab:menu_shadowYOffset="4dp"
    fab:menu_showShadow="true">

    <com.github.clans.fab.FloatingActionButton
        android:id="@+id/pronostico"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/fab_add"
        fab:fab_label="Añadir Pronóstico"
        fab:fab_size="mini" />

</com.github.clans.fab.FloatingActionMenu>


</RelativeLayout>

DataBase.java 的一部分

public Cursor GetAllPickData()
{
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery("SELECT * FROM pronostico;", null);
    return c;
}
public List<DBPronosticos> getCursosList(){
    List<DBPronosticos>  list= new ArrayList<>();

    Cursor c= this.GetAllPickData();


    while (c.moveToNext()){
        DBPronosticos curso = new DBPronosticos();

        curso.setFecha(c.getString(1));
        curso.setNombre_tipster(c.getString(3));
        curso.setEncuentro(c.getString(4));
        curso.setApuesta(c.getString(4));
        curso.setCuota(c.getDouble(4));
        curso.setCantidad_apuesta(c.getDouble(4));
        curso.setResultado(c.getString(4));
    }

    return list;

}

【问题讨论】:

    标签: java android sqlite adapter


    【解决方案1】:

    确保您绑定到适配器的列表不为空。您可以为适配器分配一个空列表并通知更新。此外,您没有将变量“curso”添加到此处的列表中:

    while (c.moveToNext()){
        DBPronosticos curso = new DBPronosticos();
    
        curso.setFecha(c.getString(1));
        curso.setNombre_tipster(c.getString(3));
        curso.setEncuentro(c.getString(4));
        curso.setApuesta(c.getString(4));
        curso.setCuota(c.getDouble(4));
        curso.setCantidad_apuesta(c.getDouble(4));
        curso.setResultado(c.getString(4));
    
       //Add this line  
       list.add(curso);
    }
    

    【讨论】:

    • 我应该添加您提出的结果吗?我完全不理解你。谢谢!
    • @DannyGM16 是的,对不起,我将编辑答案以使其更清楚。很高兴它起作用了:)
    猜你喜欢
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2021-04-24
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多