Android ';无法转换为';自定义适配器中出现错误
我有一个带有slidemenu的应用程序,其中有一些片段 我使用了两个自定义适配器,它们都是相同的代码,并且其中只有一个具有比另一个多的映像 customadapter文件是:Android ';无法转换为';自定义适配器中出现错误,android,android-fragments,Android,Android Fragments,我有一个带有slidemenu的应用程序,其中有一些片段 我使用了两个自定义适配器,它们都是相同的代码,并且其中只有一个具有比另一个多的映像 customadapter文件是: package ir.monocode.az; import ir.monocode.az.R; import java.util.ArrayList; import android.content.Context; import android.content.res.Resources; import andr
package ir.monocode.az;
import ir.monocode.az.R;
import java.util.ArrayList;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/********* Adapter class extends with BaseAdapter and implements with OnClickListener ************/
public class CustomAdapter extends BaseAdapter implements OnClickListener {
/*********** Declare Used Variables *********/
private Context activity;
private ArrayList data;
private static LayoutInflater inflater=null;
public Resources res;
CatsModel tempValues=null;
int i=0;
Context context;
Typeface face;
/************* CustomAdapter Constructor *****************/
public CustomAdapter(Context context, ArrayList d,Resources resLocal) {
/********** Take passed values **********/
activity = context;
data=d;
res = resLocal;
/*********** Layout inflator to call external xml layout () **********************/
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/******** What is the size of Passed Arraylist Size ************/
public int getCount() {
if(data.size()<=0)
return 1;
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
/********* Create a holder to contain inflated xml file elements ***********/
public static class ViewHolder{
public TextView text;
public ImageView image;
}
/*********** Depends upon data size called for each row , Create each ListView row ***********/
public View getView(int position, View convertView, ViewGroup parent) {
View vii=convertView;
ViewHolder holder;
if(convertView==null){
/********** Inflate tabitem.xml file for each row ( Defined below ) ************/
vii = inflater.inflate(R.layout.catitems, null);
/******** View Holder Object to contain tabitem.xml file elements ************/
holder=new ViewHolder();
holder.text=(TextView)vii.findViewById(R.id.ctextView1);
holder.image=(ImageView)vii.findViewById(R.id.cimageView2);
Typeface typeface = Typeface.createFromAsset(holder.text.getContext().getAssets(),
"fonts/B YEKAN.TTF");
holder.text.setTypeface(typeface);
/************ Set holder with LayoutInflater ************/
vii.setTag(holder);
}
else
holder=(ViewHolder)vii.getTag();
if(data.size()<=0)
{
holder.text.setText("No Data");
}
else
{
/***** Get each Model object from Arraylist ********/
tempValues=null;
tempValues = (CatsModel) data.get(position);
/************ Set Model values in Holder elements ***********/
holder.text.setText(tempValues.getCatName());
int resID = activity.getResources().getIdentifier("icon"+tempValues.getImage() , "drawable", activity.getPackageName());
holder.image.setImageResource(resID);
/******** Set Item Click Listener for LayoutInflater for each row ***********/
vii.setOnClickListener(new OnItemClickListener(position));
}
return vii;
}
@Override
public void onClick(View v) {
Log.v("CustomAdapter", "=====Row button clicked");
}
/********* Called when Item click in ListView ************/
private class OnItemClickListener implements OnClickListener{
private int mPosition;
OnItemClickListener(int position){
mPosition = position;
}
@Override
public void onClick(View arg0) {
MainActivity sct = (MainActivity)activity;
sct.customonItemClick(mPosition);
}
}
}
我必须如何解决我的问题?
你能帮我吗?
谢谢你你可以用多态性来解决。用接口
BaseAdapter
类似这样(您的相关代码没有发布,所以这只是一个猜测)
变成
BaseAdapter it = retrieveMyCustomAdapter();
一种更正式的方法是声明一个扩展BaseAdapter的抽象类,并使CatsModel和ArticlesModel都继承这个新类。我建议您编辑这个问题,使类强制转换错误消息接近顶部,以便人们立即看到问题所在,然后决定是否查看代码。此外,尽量不要像在儿童聊天室一样写作,也就是说,在需要的时候使用大写字母。如果可用,从堆栈跟踪中再发布几行。所有这些都将为您带来更多的成功:-)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cLinearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:gravity="right"
android:orientation="vertical"
android:paddingBottom="10dp" >
<LinearLayout
android:id="@+id/cLinearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:gravity="right" >
<TextView
android:id="@+id/ctextView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal"
android:paddingRight="10dp"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#215e76"
android:textSize="20sp" />
<ImageView
android:id="@+id/cimageView2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:maxHeight="20dp"
android:maxWidth="20dp"
android:padding="5dp"
android:src="@drawable/ic_launcher" />
<ImageView
android:id="@+id/cimageView1"
android:layout_width="10dp"
android:layout_height="match_parent"
android:background="#ffc20e" />
</LinearLayout>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/aLinearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:gravity="right"
android:orientation="vertical"
android:paddingBottom="10dp" >
<LinearLayout
android:id="@+id/aLinearLayout3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:gravity="right" >
<TextView
android:id="@+id/atextView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal"
android:paddingRight="10dp"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#215e76"
android:textSize="20sp" />
<ImageView
android:id="@+id/aimageView1"
android:layout_width="10dp"
android:layout_height="match_parent"
android:background="#ffc20e" />
</LinearLayout>
</LinearLayout>
java.lang.ClassCastException: ir.monocode.az.ArticlesModel cannot be cast to ir.monocode.az.CatsModel
CatsModel it = retrieveMyCustomAdapter();
BaseAdapter it = retrieveMyCustomAdapter();