【发布时间】:2018-04-22 08:09:24
【问题描述】:
我已经在 android 上尝试了几个星期,但是在使用自定义对象填充列表视图时遇到了障碍。我已经尝试了几个关于堆栈溢出和 youtube 的教程,但是当应用程序运行时,它在 list.setAdapter(adapter) 处崩溃。但我不知道是什么原因。
这是我最近的尝试:
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: > 致命异常: main 进程:blackanvil.com.dmi,PID:12587
java.lang.NoSuchMethodError: 没有虚拟方法 getLayoutInflater()Landroid/view/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.AbsListView.obtainView(AbsListView.java:2497) 在 android.widget.ListView.makeAndAddView(ListView.java:1930) 在 android.widget.ListView.fillDown(ListView.java:722) 在 android.widget.ListView.fillFromTop(ListView.java:783) 在 android.widget.ListView.layoutChildren(ListView.java:1721) 在 android.widget.AbsListView.onLayout(AbsListView.java:2254) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1855) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:398) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1855) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:132) 在 android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) 在 android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1361) 在 android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:869) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1172) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:398) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:2022) 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1865) 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1774) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.widget.FrameLayout.layoutChildren(FrameLayout.java:398) 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:2022) 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1865) 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1774) 在 android.view.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.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.View.layout(View.java:16966) 在 android.view.ViewGroup.layout(ViewGroup.java:5604) 在 android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2635) 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2329) 在 android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1367) 在 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6974) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:922) 在 android.view.Choreographer.doCallbacks(Choreographer.java:724) 在 android.view.Choreographer.doFrame(Choreographer.java:658) 在 android.view.Ch 04-22 10:43:57.117 12587-12587/blackanvil.com.dmi I/Process:发送信号。 PID:12587 SIG:9
【问题讨论】:
-
您的代码似乎有很多问题。请提供崩溃日志。
-
@tahsinRupam 我已将 Logcat 添加到原始帖子中。
标签: java android listview custom-adapter