J'ai une liste avec CursorAdapter (pas simplecursordadpter) et j'essaye de changer la gravité de mon élément de liste.Modifier la gravité de l'élément de liste dans les résultats Android dans une exception
Les problèmes semble être à la ligne:
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) row.getLayoutParams();
Voici ma liste d'articles de la ligne 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="match_parent"
android:orientation="vertical"
android:minWidth="100dp"
android:background="@drawable/selector_items"
android:descendantFocusability="blocksDescendants"
android:padding="3dp"
android:layout_margin="2dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:minWidth="280dp"
android:background="@drawable/bolha_b"
android:layout_gravity="start"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/text_tit_mg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:shadowColor="@color/textShadow"
android:shadowDx="1"
android:shadowDy="1"
android:text="teste"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:paddingRight="5dp"
android:paddingLeft="5dp"
android:layout_margin="5dp"
android:textColor="@color/black"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView
android:id="@+id/img_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bin"
android:clickable="true"
android:layout_gravity="right"
android:layout_weight="0"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:layout_marginLeft="5dp"
android:text="De:"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black"
android:textStyle="bold"
/>
<TextView
android:id="@+id/txtfrom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:shadowColor="@color/textShadow"
android:layout_marginLeft="5dp"
android:text="nomefrom"
android:lines="1"
android:singleLine="true"
android:ellipsize="end"
android:textColor="@color/black"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
<net.techabout.medappointment.TextViewFixTouchConsume
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginLeft="5dp"
android:shadowColor="@color/textShadow"
android:shadowDx="1"
android:shadowDy="1"
android:text=""
android:textColorLink="@color/colorBackground"
android:layout_weight="1"
android:textColor="#040404"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:text=""
android:layout_marginRight="5dp"
android:textColor="#999"
android:textAppearance="?android:attr/textAppearanceSmall" />
<Button
android:id="@+id/but_answer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:text="Responder"
android:background="@drawable/greenbutton"
style="@style/MyButtonStyleSmall"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
</LinearLayout>
que je fais:
public View getView(int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) row.getLayoutParams();
if (position % 2 == 0) {
row.setBackgroundResource(R.drawable.bolha_a);//green
params.gravity = Gravity.END;
row.setLayoutParams(params);
row.setPadding(50, 10, 20, 10);
} else {
row.setBackgroundResource(R.drawable.bolha_b);//white
params.gravity = Gravity.START;
row.setLayoutParams(params);
row.setPadding(30, 10, 30, 10);
}
return row;
}
Mais je reçois une exception en disant:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.techabout.medappointment, PID: 11498
java.lang.ClassCastException: android.widget.AbsListView$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
at net.techabout.medappointment.MessagesCursorAdapter.getView(MessagesCursorAdapter.java:95)
at android.widget.AbsListView.obtainView(AbsListView.java:2346)
at android.widget.ListView.makeAndAddView(ListView.java:1875)
at android.widget.ListView.fillSpecific(ListView.java:1354)
at android.widget.ListView.layoutChildren(ListView.java:1674)
at android.widget.AbsListView.onLayout(AbsListView.java:2148)
Toute aide, s'il vous plaît. Voici le code complet:
public class MessagesCursorAdapter extends CursorAdapter {
/**
* Cache of the children views
*/
public static class ViewHolder {
public final Button butAnswer;
public ImageView imgDelete;
public final TextView mTitle;
public final TextView mMsgFrom;
public final TextView mMsg;
public final TextView mTime;
public ViewHolder(View view) {
mTitle = (TextView) view.findViewById(R.id.text_tit_mg);
mMsgFrom = (TextView) view.findViewById(R.id.txtfrom);
mMsg = (TextView) view.findViewById(R.id.text1);
mTime = (TextView) view.findViewById(R.id.text2);
}
}
public MessagesCursorAdapter(Context context, Cursor c, int flags) {
super(context, c, flags);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
int layoutId = R.layout.msg_list_item;
View view = LayoutInflater.from(context).inflate(layoutId, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
return view;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) row.getLayoutParams();
if (position % 2 == 0) {
row.setBackgroundResource(R.drawable.bolha_a);//green
params.gravity = Gravity.END;
row.setLayoutParams(params);
row.setPadding(50, 10, 20, 10);
} else {
row.setBackgroundResource(R.drawable.bolha_b);//white
params.gravity = Gravity.START;
row.setLayoutParams(params);
row.setPadding(30, 10, 30, 10);
}
return row;
}
@Override
public void bindView(View view, Context context, final Cursor cursor) {
ViewHolder viewHolder = (ViewHolder) view.getTag();
String temp = cursor.getString(cursor.getColumnIndexOrThrow(DataProvider.COL_TIT));
viewHolder.mTitle.setText(temp);
temp = cursor.getString(cursor.getColumnIndexOrThrow(DataProvider.COL_MSG));
}
}
duplication possible: [ClassCastException LinearLayout LayoutParams] (http://stackoverflow.com/questions/14004063/classcastexception-linearlayout-layoutparams) – c0rtexx
pourquoi appelez-vous super.getView? – Pooya
Merci à tous. Je viens de le résoudre. –