erreur de casting textview: - android.widget.LinearLayout ne peut pas être lancé sur android.widget.TextView

s'il vous plaît aider à résoudre ce problème , dans ce que je suis en train d'essayer d'obtenir la liste des pays dans la casserole avec son drapeau Et voici le code: j'ai appelé l'objet compteur dans le fragment

v=inflater.inflate(R.layout.view_flipper_activity,container, false);
            Spinner citizenship = (Spinner)v.findViewById(R.id.country_spinner);
            citizenship.setAdapter(new CountriesListAdapter(getActivity(),recourseList));

et l'adaptation par pays est:

public class CountriesListAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;

public CountriesListAdapter(Context context,String[] values){
    super(context,R.layout.country_list_item,values);
    this.context=context;
    this.values=values;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(R.layout.country_list_item, parent, false);
    TextView textView= (TextView) rowView.findViewById(R.id.txtViewCountryName);
    ImageView imageView = (ImageView) rowView.findViewById(R.id.imgViewFlag);

    String[] g=values[position].split(",");
    textView.setText(GetCountryZipCode(g[1]).trim());


    String pngName = g[1].trim().toLowerCase();
    imageView.setImageResource(context.getResources().getIdentifier("drawable/" + pngName, null, context.getPackageName()));
    return rowView;
}

private String GetCountryZipCode(String ssid){
    Locale loc = new Locale("", ssid);

    return loc.getDisplayCountry().trim();
}

}

Voici mon xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
>
<ImageView
    android:id="@+id/imgViewFlag"
    android:layout_height="40dp"
    android:layout_width="40dp"
    android:layout_margin="5dp" />

<TextView
    android:id="@+id/txtViewCountryName"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="hello"
    android:textSize="20dp"
    android:layout_centerVertical="true"
    android:layout_toEndOf="@+id/imgViewFlag" />

</RelativeLayout>

Logcat:

java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
        at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:416)
        at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:896)
        at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:892)
        at android.widget.Spinner.measureContentWidth(Spinner.java:772)
        at android.widget.Spinner$DropdownPopup.computeContentWidth(Spinner.java:1144)
        at android.widget.Spinner$DropdownPopup.show(Spinner.java:1173)
        at android.widget.Spinner.performClick(Spinner.java:685)
        at android.view.View$PerformClick.run(View.java:19311)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5692)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView


    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379) 
at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:416)
   at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:896)

0
demandé sur silverFoxA 2015-03-27 03:53:19

2 réponses

essayez ceci dans le constructeur pour CountriesListAdapter classe:

super(context, R.layout.country_list_item, R.id.txtViewCountryName, values);

au lieu de:

super(context,R.layout.country_list_item,values);

j'ai essayé et ça a marché.

Edit: J'ai aussi dû modifier votre mise en page car le TextView interférait avec le ImageView :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp" >

    <ImageView
        android:id="@+id/imgViewFlag"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:layout_margin="5dp" />

    <TextView
        android:id="@+id/txtViewCountryName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toEndOf="@id/imgViewFlag"
        android:layout_toRightOf="@id/imgViewFlag"
        android:text="hello"
        android:textAppearance="@android:style/TextAppearance.Medium.Inverse" />

</RelativeLayout>

et la raison pour laquelle les images de pays n'étaient pas selector list était parce que vous devez également remplacer getDropDownView dans CountriesListAdapter et faire la même chose que ce qui est fait dans getView comme ainsi:

@Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return getView(position, convertView, parent);
    }

j'ai essayé avec:

values = new String[]{ "CHINA,zh_CN", "JAPAN,ja_JP", "KOREA,ko_KR", "TAIWAN,zh_TW" }
Images de ressources

et drawable zh_cn.png , ja_jp.png , ko_kr.png et zh_tw.png

3
répondu electrocrat 2015-03-27 11:25:23

changer le code String[] g=values[position].split(","); textView.setText(GetCountryZipCode(g[1]).trim());

à

String[] g=values[position].split(","); String k= g[1]; textView.setText((GetCountryZipCode[k]).trim());

0
répondu Arshid KV 2015-03-27 04:23:08