第一行代码 listview 出现报错,怎么解决?

发布于 2022-09-07 15:39:04 字数 11686 浏览 56 评论 0

今天看到Listview这篇,照着文中的代码试了之后,发现报错了。
多看了几次,发现自己并没有带错代码啊,求交怎么解决问题

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) 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苦笑流年记忆 2022-09-14 15:39:05

ArrayAdapter requires the resource ID to be a TextView,你请求的是adapter用的资源id应该是一个textView控件的id。根据你写的adapter继承的ArrayAdapter的的构造函数看,他需要传的是一个textview控件的资源id而不是一个布局的资源id

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文