Ich versuche, etwas Übung über Android ListView
zu machen. Code unten ist in einem
listfragment
:Einige Probleme mit Android-Listenansicht
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view= inflater.inflate(R.layout.frag_getfriends,container,false);
friendsListView=(ListView)view.findViewById(android.R.id.list);
infoTextView=(TextView)view.findViewById(android.R.id.empty);
swipe=(SwipeRefreshLayout)view.findViewById(R.id.swipe_refresh);
swipe.setOnRefreshListener(this);
arrayAdapter=new DataListAdapter(getActivity(),R.layout.userinfo_list_config,null);
friendsListView.setAdapter(arrayAdapter);
friendsListView.setOnItemClickListener((parent,itemView,position,id)->{
if(friends!=null){
User friend=friends.get(position);
Toast.makeText(getActivity(),friend.getName(),Toast.LENGTH_SHORT).show();
}
});
presenter.startQuery(true);
return view;
}
Adapter
Konstruktor ist:
public DataListAdapter(Context context, int itemLayoutResoureId, ArrayList<User>friends){
super(context,itemLayoutResoureId,friends);
this.context=context;
this.users=new ArrayList<>();
users.addAll(friends);
}
Zu Beginn der listview
keine Daten angezeigt werden, bis diese App einige Daten online abruft:
@Override
public void setDataList(ArrayList<User> friendsList) {
this.friends=friendsList;
arrayAdapter.clear();
arrayAdapter.addAll(friendsList);
arrayAdapter.notifyDataSetChanged();
friendsListView.setAdapter(arrayAdapter);
}
Später kann ich einige aktualisieren.Und jede Aktualisierung passiert, der Rückruf
setDataList
wird gefeuert und listview
aktualisiert werden. Die App stürzte jedoch ab. Logcat zeigt:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mrdreamer.iknow/com.example.mrdreamer.iknow.Social.GetFriends}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
at java.util.ArrayList.addAll(ArrayList.java:188)
at com.example.mrdreamer.iknow.Social.DataListAdapter.<init>(DataListAdapter.java:35)
at com.example.mrdreamer.iknow.Social.GetFriendsFrag.onCreateView(GetFriendsFrag.java:42)
at android.app.Fragment.performCreateView(Fragment.java:2220)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
at android.app.BackStackRecord.run(BackStackRecord.java:793)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
at android.app.FragmentController.execPendingActions(FragmentController.java:325)
at android.app.Activity.performStart(Activity.java:6252)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Das Problem ist, dass in:
arrayAdapter=new DataListAdapter(getActivity(),R.layout.userinfo_list_config,null);
der letzte Parameter nicht null sein kann, was ich verstehe. Jetzt sollte ich zu SimpleCursorAdapter wechseln oder nur eine Änderung am aktuellen Code vornehmen? :) Vielen Dank im Voraus.Ich bin neu bei Android Entwicklung.Ich bin sehr dankbar. :)
laden Sie Ihr Crash-Log – Boopathi
@ 吴 环宇, post Ur Adapter Klasse Konstruktor – shahid17june
Verwenden Sie CustomArrayAdapter. Google es. – Nidhi