首页 文章

使用自定义对象的arrayList填充listview

提问于
浏览
-1

我已经在Android上尝试了几个星期,但是在使用自定义对象填充listview时遇到了麻烦 . 我已经尝试了几个有关堆栈溢出和youtube的教程,但是当应用程序运行时,它会在list.setAdapter(适配器)崩溃 . 但我不清楚原因是什么 .

这是我最近的尝试:

public class NPCEditor extends Fragment{

    View myView;
    ArrayList<NPC> NPCs = new ArrayList<>();

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        myView = inflater.inflate(R.layout.npc_edit, container, false);

        populateNPCList();
        populateListview();

        return myView;
    }

    private void populateNPCList(){
        NPCs.add(new NPC(40, 10, 10, 10, 10, 10, 10, "", "", "", "", "", "", ""));
        NPCs.add(new NPC(50, 10, 10, 10, 10, 10, 10, "", "", "", "", "", "", ""));
        NPCs.add(new NPC(60, 10, 10, 10, 10, 10, 10, "", "", "", "", "", "", ""));
        NPCs.add(new NPC(70, 10, 10, 10, 10, 10, 10, "", "", "", "", "", "", ""));
        NPCs.add(new NPC(80, 10, 10, 10, 10, 10, 10, "", "", "", "", "", "", ""));
    }

    private void populateListview(){
        ArrayAdapter<NPC> adapter = new NPCAdapter2();
        ListView list = myView.findViewById(R.id.NPCList);
        list.setAdapter(adapter);
    }

    private class NPCAdapter2 extends ArrayAdapter<NPC>{
        public NPCAdapter2(){
            super(getActivity(), R.layout.npc_layout, NPCs);
        }

        public View getView(int position, View convertView, ViewGroup parent){
            View itemView = convertView;
            if(itemView == null){
                itemView = getLayoutInflater().inflate(R.layout.npc_layout, parent, false);
            }
            NPC currentNPC = NPCs.get(position);
            TextView txtAge = itemView.findViewById(R.id.textAge);
            txtAge.setText(currentNPC.getAge());
            return  itemView;
       }
    }
}

和xml文件npc_layout

<?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">

    <TextView
        android:id="@+id/textAge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Age" />
</LinearLayout>

和NPCEditor布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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">

    <ListView
        android:id="@+id/NPCList"
        android:layout_width="368dp"
        android:layout_height="327dp"
        android:layout_marginBottom="16dp"
        android:layout_marginStart="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>

logcat的:

崩溃的开始

04-22 10:43:56.986 12587-12587 / blackanvil.com.dmi E / AndroidRuntime:> FATAL EXCEPTION:main进程:blackanvil.com.dmi,PID:12587 java.lang.NoSuchMethodError:没有虚方法getLayoutInflater() Landroid /视图/ LayoutInflater;在课程Lblackanvil / com / dmi / NPCEditor;或者它的超级类('blackanvil.com.dmi.NPCEditor'的声明出现在/data/app/blackanvil.com.dmi-1/split_lib_slice_2_apk.apk)在blackanvil.com.dmi.NPCEditor $ NPCAdapter2.getView(NPCEditor . java:53)在android.widget.AbsList.obtainView(AbsListView.java:2497)的android.widget.List.makeAndAddView(ListView.java:1930)在android.widget.ListView.fillDown(ListView.java:722)at在Android.view.View.View的android.widget.AbsList.onLayout(AbsListView.java:2254)上的android.widget.ListView.fillFromTop(ListView.java:783)android.widget.ListView.layoutChildren(ListView.java:1721) .layout(View.java:16966)位于android.view.Viewout上的android.view.ViewGroup.layout(ViewGroup.java:5604)android.sview.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1855) View.java:16966)在Android.widget.FrameLayout.onLayout(FrameLayout.java:333)的android.widget.FrameLayout.layoutChildren(FrameLayout.java:398)的android.view.ViewGroup.layout(ViewGroup.java:5604) )在android.view.Vie在android.view.View.Viewout的android.sview.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1855)的android.view.ViewGroup.layout(ViewGroup.java:5604)的w.layout(View.java:16966) (View.java:16966)位于android.support.design.wout.Seout上的android.view.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:132)上的android.view.ViewGroup.layout(ViewGroup.java:5604) . 在Android.support.design.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:869)的android.support.design.widget.AppBarLayout $ ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1361)中的ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)在android.view.View.layout(View.java:16966)的android.view.ViewGroup.layout(ViewGroup.java:5604)在android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1172)at at android.view.Viewout.Loutout.layoutChildren上的android.view.View.layout(View.java:16966)android.view.Viewout.layout(ViewGroup.java:5604)(FrameLayout.java:398) )在Android.widget.fallLayout.onLayout(FrameLayout.java:333)的android.view.View.layout(View.java:16966)android.view.Viewout上的android.view.ViewGroup.layout(ViewGroup.java:5604) .LinearLayout.setChildFrame(LinearLayout.java:2022)在Android.widget.Line中的android.widget.LinearLayout.onLayout(LinearLayout.java:1774)android.view.Loutout . View.java:16966)在Android.widget.FrameLayout.onLayout(FrameLayout.java:333)的android.widget.FrameLayout.layoutChildren(FrameLayout.java:398)的android.view.ViewGroup.layout(ViewGroup.java:5604) )在Android.widget.Linout.setChildFrame(LinearLayout.java:2022)android.view上的android.view.View.layout(View.java:16966)的android.view.View.layout(ViewGroup.java:5604) .LinearLayout.layoutVertical(LinearLayout.java:1865)在android.view.Loutout.onLayout(LinearLayout.java:1774)的android.view.View.layout(View.java:16966)android.view.ViewGroup.layout( ViewGroup.java:5604)atr oid.widget.FrameLayout.layoutChildren(FrameLayout.java:398)在android.widget.FrameLayout.onLayout(FrameLayout.java:333)com.android.internal.policy.PhoneWindow $ DecorView.onLayout(PhoneWindow.java:2817)在Android.view上的android.view.View.Loutout(ViewRootImpl.java:2635)的android.view.View.layout(View.java:16966)上的android.view.View.layout(ViewGroup.java:5604) . 在Android.view.Choreographer $ CallbackRecord的android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:6974)的android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1367)上的ViewRootImpl.performTraversals(ViewRootImpl.java:2329) .run(Choreographer.java:922)在android.view.Choreographer.doCallbacks(Choreographer.java:724)atandroid.view.Choreographer.doFrame(Choreographer.java:658)at android.view.Ch 04-22 10:43:57.117 12587-12587 / blackanvil.com.dmi I / Process:发送信号 . PID:12587 SIG:9

2 回答

相关问题