ClassCastException error on Android

1

When running the following line on android:

recyclerView.getChildAdapterPosition(view);

Skip the following Exception:

java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.support.v7.widget.RecyclerView$LayoutParams
    at android.support.v7.widget.RecyclerView.getChildViewHolderInt(RecyclerView.java:4272)
    at android.support.v7.widget.RecyclerView.getChildAdapterPosition(RecyclerView.java:4291)
    at com.jose.miapp.cotiapp.fragments.ActividadesCompradasFragment$1.onClick(ActividadesCompradasFragment.java:130)
    at com.jose.miapp.cotiapp.adapter.ActividadesCompradasAdapter.onClick(ActividadesCompradasAdapter.java:59)

I have the following classes that may be useful: ActivitiesCompradasFragment.java

private static final String ARG_COLUMN_COUNT = "column-count";
private int mColumnCount = 1;
private OnListFragmentInteractionListener mListener;
JsonObjectRequest jsonObjectRequest;
private List<Actividad> mValues;
Context context;
RecyclerView recyclerView;
View view;

public ActividadesCompradasFragment() {
}

@SuppressWarnings("unused")
public static ActividadesCompradasFragment newInstance(int columnCount) {
    ActividadesCompradasFragment fragment = new ActividadesCompradasFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_COLUMN_COUNT, columnCount);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getArguments() != null) {
        mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT);
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    mValues = new ArrayList<>();
    System.out.println(mValues.size());
    view = inflater.inflate(R.layout.fragment_actividades_compradas_list, container, false);


    // Set the adapter
    if (view instanceof RecyclerView) {
         context = view.getContext();
         recyclerView = (RecyclerView) view;

        if (mColumnCount <= 1) {
            recyclerView.setLayoutManager(new LinearLayoutManager(context));
        } else {
            recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount));
        }

        cargarWebService();

    }
    return view;
}


@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnListFragmentInteractionListener) {
        mListener = (OnListFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnListFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

private void cargarAdapter(final List<Actividad> mValues){
    ActividadesCompradasAdapter adaptador = new ActividadesCompradasAdapter(mValues, mListener);
    adaptador.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Toast.makeText(getActivity().getApplicationContext(),

        recyclerView.getChildAdapterPosition(view);
        }
    });
    recyclerView.setAdapter(adaptador);
}

//Inicio de funciones relacionadas con base de datos

@Override
public void onErrorResponse(VolleyError error) {
    System.out.println(error.getMessage());
}

@Override
public void onResponse(JSONObject response) {

    JSONArray jsonArray=response.optJSONArray("actividades");
    JSONObject jsonObject = null;
    for (int i = 0; i < jsonArray.length(); i++) {
        try {
            jsonObject = jsonArray.getJSONObject(i);
            System.out.println(jsonObject);
            Actividad nuevaAct = new Actividad(Integer.parseInt(jsonObject.getString("codigo")),jsonObject.getString("titulo"));
            this.mValues.add(nuevaAct);
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
    cargarAdapter(mValues);
}

public void cargarWebService() {

    String ip="http://192.168.1.107/nn";
    String url=ip+"/kkkkkkk.php?codUsuario="+LoginActivity.leerValor("codUsuario",getContext());

    jsonObjectRequest=new JsonObjectRequest(Request.Method.GET,url,null,this,this);
    VolleySingleton.getIntanciaVolley(context).addToRequestQueue(jsonObjectRequest);

    System.out.println(jsonObjectRequest);
}


public interface OnListFragmentInteractionListener {
    // TODO: Update argument type and name
    void onListFragmentInteraction(Actividad item);
}
}

ActivitiesBuyAdapter.java

public class ActividadesCompradasAdapter extends RecyclerView.Adapter<ActividadesCompradasAdapter.ViewHolder> implements View.OnClickListener{

private final List<Actividad> mValues;
private final OnListFragmentInteractionListener mListener;
private View.OnClickListener clickListener;

public ActividadesCompradasAdapter(List<Actividad> items, OnListFragmentInteractionListener listener) {
    mValues = items;
    mListener = listener;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.fragment_actividades_compradas, parent, false);
    view.setOnClickListener(this);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    holder.mItem = mValues.get(position);
    holder.mIdView.setText(String.valueOf(mValues.get(position).codigo));
    holder.mContentView.setText(mValues.get(position).titulo);
    //viewHolder.itemView.setTag(<SET_YOUR_ID>);
}

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

public void setOnClickListener(View.OnClickListener clickListener) {
    this.clickListener = clickListener;
}

@Override
public void onClick(View v) {
    if(clickListener != null)
        clickListener.onClick(v);
}

public class ViewHolder extends RecyclerView.ViewHolder {
    public final View mView;
    public final TextView mIdView;
    public final TextView mContentView;
    public Actividad mItem;

    public ViewHolder(View view) {
        super(view);
        mView = view;
        mIdView = (TextView) view.findViewById(R.id.item_number);
        mContentView = (TextView) view.findViewById(R.id.content);
    }

    @Override
    public String toString() {
        return super.toString() + " '" + mContentView.getText() + "'";
    }
}
}

fragment_completed_activities_list.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView 
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:id="@+id/listCompradas"
android:name="com.jose.miapp.cotiapp.ActividadesCompradasFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:padding="10dp"
app:layoutManager="LinearLayoutManager"
tools:context=".fragments.ActividadesCompradasFragment"
tools:listitem="@layout/fragment_actividades_vendidas" />

fragment_activities_compradas.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_margin="15dp"
android:background="@drawable/borde_redondo_actividades"
android:orientation="horizontal">

<TextView
    android:id="@+id/item_number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/text_margin"
    android:background="@drawable/borde_redondo_num"
    android:gravity="center"
    android:textAppearance="?attr/textAppearanceListItem"
    android:textColor="@color/colorPrimaryDark" />

<TextView
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/text_margin"
    android:gravity="center"
    android:textAppearance="?attr/textAppearanceListItem"
    android:textColor="@android:color/black"
    android:textStyle="bold" />
</LinearLayout>

The type of my fragment fragment_activities_compradas_list is RecyclerView , the of fragment_compatible_activities is LinearLayout . I think that the problem may arise because I have a content_main of type RelativeLayout from which I am charging everything, but I do not know how to give it a solution.

Thank you.

    
asked by José 24.11.2018 в 17:52
source

1 answer

0

It is assumed that this line returns an integer value that indicates the position of the child view ( view ) in its parent view ( recyclerView )

recyclerView.getChildAdapterPosition(view)

It is incorrect to define this line since you are not returning any value.

adaptador.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Toast.makeText(getActivity().getApplicationContext(),

        recyclerView.getChildAdapterPosition(view); //*INCORRECTO.
    }
});

If you want to get the position this is one way:

  adaptador.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Toast.makeText(getActivity().getApplicationContext(),
            //recyclerView.getChildAdapterPosition(view); //*INCORRECTO.

        RecyclerView recyclerView = (RecyclerView) view.getParent();
        ItemViewHolder currentViewHolder = (ItemViewHolder) recyclerView.getChildViewHolder(clickedView);
        int posicion = currentViewHolder.getAdapterPosition();
         Toast.makeText(mContext, "Clic posición: " + posicion, Toast.LENGTH_SHORT).show();

        }
    });
    
answered by 25.11.2018 / 04:42
source