鍍金池/ 問答/Java  C  Android  網(wǎng)絡(luò)安全  HTML/ 第一行代碼 listview 出現(xiàn)報錯,怎么解決?

第一行代碼 listview 出現(xiàn)報錯,怎么解決?

今天看到Listview這篇,照著文中的代碼試了之后,發(fā)現(xiàn)報錯了。
多看了幾次,發(fā)現(xiàn)自己并沒有帶錯代碼啊,求交怎么解決問題

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private List<Fruit> fruitList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFruits();

        FruitAdapter arrayAdapter = new FruitAdapter(MainActivity.this,R.layout.fruit_item,fruitList);
      
        ListView listView = (ListView) findViewById(R.id.listview);
        listView.setAdapter(arrayAdapter);
    }

    private void initFruits(){
        for( int i =0; i<2;i++){
            Fruit apple = new Fruit("Apple",R.drawable.apple_pic);
            fruitList.add(apple);
            Fruit banana = new Fruit("Banana",R.drawable.banana_pic);
            fruitList.add(banana);
            Fruit orange = new Fruit("Orange",R.drawable.orange_pic);
            fruitList.add(orange);
            Fruit watermelon = new Fruit("Watermelon",R.drawable.watermelon_pic);
            fruitList.add(watermelon);
            Fruit pear = new Fruit("Pear",R.drawable.pear_pic);
            fruitList.add(pear);
            Fruit grape = new Fruit("Grape",R.drawable.grape_pic);
            fruitList.add(grape);
            Fruit pineapple = new Fruit("Pineapple",R.drawable.pineapple_pic);
            fruitList.add(pineapple);
            Fruit strawberry = new Fruit("Strawberry",R.drawable.strawberry_pic);
            fruitList.add(strawberry);
            Fruit cherry = new Fruit("Cherry",R.drawable.cherry_pic);
            fruitList.add(cherry);
            Fruit mango = new Fruit("Mango",R.drawable.mango_pic);
            fruitList.add(mango);

        }
    }
}

FruitAdapter.java

public class FruitAdapter extends ArrayAdapter<Fruit> {

    private int resourseId;
    public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects){
        super(context,textViewResourceId,objects);
        resourseId = textViewResourceId;

    }
    public View getview(int position, View ConvertView, ViewGroup parent){
        Fruit fruit = getItem(position); 
        View view= LayoutInflater.from(getContext()).inflate(resourseId,parent,false);
        ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
        TextView fruitName =(TextView) view.findViewById(R.id.fruitname);
        fruitImage.setImageResource(fruit.getImageId());
        fruitName.setText(fruit.getName());
        return view;
    }
}

Fruit.java

public class Fruit {

    private String name;
    private int imageId;

    public Fruit (String name,int imageId){
        this.name = name;
        this.imageId = imageId;

    }

    public String getName() {
        return name;
    }

    public int getImageId() {
        return imageId;
    }
}

ativity_mian.xml

<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listview"></ListView>
</LinearLayout>

fruit_item.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fruit_image"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fruitname"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"/>

</LinearLayout>

報錯:

Process: com.example.hwy01.listviewtest, PID: 25459
    java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:445)
        at android.widget.ArrayAdapter.getView(ArrayAdapter.java:415)
        at android.widget.AbsListView.obtainView(AbsListView.java:2366)
        at android.widget.ListView.makeAndAddView(ListView.java:2052)
        at android.widget.ListView.fillDown(ListView.java:786)
        at android.widget.ListView.fillFromTop(ListView.java:847)
        at android.widget.ListView.layoutChildren(ListView.java:1826)
        at android.widget.AbsListView.onLayout(AbsListView.java:2165)
        at android.view.View.layout(View.java:20670)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:20670)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20670)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443)
        at android.view.View.layout(View.java:20670)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:20670)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:20670)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)
        at android.view.View.layout(View.java:20670)
        at android.view.ViewGroup.layout(ViewGroup.java:6194)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2767)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2294)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1447)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7130)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:935)
        at android.view.Choreographer.doCallbacks(Choreographer.java:747)
        at android.view.Choreographer.doFrame(Choreographer.java:682)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:921)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6642)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:432)
        at android.widget.ArrayAdapter.getView(ArrayAdapter.java:415)?
        at android.widget.AbsListView.obtainView(AbsListView.java:2366)?
        at android.widget.ListView.makeAndAddView(ListView.java:2052)?
        at android.widget.ListView.fillDown(ListView.java:786)?
        at android.widget.ListView.fillFromTop(ListView.java:847)?
        at android.widget.ListView.layoutChildren(ListView.java:1826)?
        at android.widget.AbsListView.onLayout(AbsListView.java:2165)?
        at android.view.View.layout(View.java:20670)?
        at android.view.ViewGroup.layout(ViewGroup.java:6194)?
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)?
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)?
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)?
        at android.view.View.layout(View.java:20670)?
        at android.view.ViewGroup.layout(ViewGroup.java:6194)?
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)?
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)?
        at android.view.View.layout(View.java:20670)?
        at android.view.ViewGroup.layout(ViewGroup.java:6194)?
        at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443)?
        at android.view.View.layout(View.java:20670)?
        at android.view.ViewGroup.layout(ViewGroup.java:6194)?
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)?
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)?
        at android.view.View.layout(View.java:20670)?
        at android.view.ViewGroup.layout(ViewGroup.java:6194)?
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)?
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)?
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)?
        at android.view.View.layout(View.java:20670)?
        at android.view.ViewGroup.layout(ViewGroup.java:6194)?
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)?
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)?
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:753)?
        at android.view.View.layout(View.java:20670)?
        at android.view.ViewGroup.layout(ViewGroup.java:6194)?
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2767)?
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2294)?
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1447)?
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7130)?
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:935)?
        at android.view.Choreographer.doCallbacks(Choreographer.java:747)?
        at android.view.Choreographer.doFrame(Choreographer.java:682)?
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:921)?
        at android.os.Handler.handleCallback(Handler.java:873)?
        at android.os.Handler.dispatchMessage(Handler.java:99)?
        at android.os.Looper.loop(Looper.java:193)?
        at android.app.ActivityThread.main(ActivityThread.java:6642)?
        at java.lang.reflect.Method.invoke(Native Method)?
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)?
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)?
回答
編輯回答
冷眸

ArrayAdapter requires the resource ID to be a TextView,你請求的是adapter用的資源id應(yīng)該是一個textView控件的id。根據(jù)你寫的adapter繼承的ArrayAdapter的的構(gòu)造函數(shù)看,他需要傳的是一個textview控件的資源id而不是一個布局的資源id

2017年7月4日 22:31