我的ListFragment有问题。我无法访问它的ListAdapter,因为我尝试这样做时总是得到NullPointerException:
ListFragment fragment = (ListFragment) getSupportFragmentManager().findFragmentByTag("fraglist1");
BaseAdapter adapter = (BaseAdapter) fragment.getListAdapter();
adapter.notifyDataSetChanged();
下面是我实现片段的XML文件:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/fragment1"
android:name="com.example.exapmle.handlers.fragments.SavedEventsListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
以下是我在SavedEventsListFragment.java类中的内容,在代码片段后面有一个onItemClick方法,但它与它无关,所以我将其删除。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraglist, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
savedevents = new ArrayList<>();
DatabaseHandler db = new DatabaseHandler(getContext());
for (Event e : db.getAllEvents()) {
savedevents.add(e);
}
if (savedevents!=null) {
SavedEventAdapter adapter = new SavedEventAdapter(getContext(), savedevents);
setListAdapter(adapter);
getListView().setOnItemClickListener(this);
ListView lv = getListView(); // your listview inside scrollview
lv.setOnTouchListener(new ListView.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
// Handle ListView touch events.
v.onTouchEvent(event);
return true;
}
});
}
}
这里是SavedEventAdapter.java类,我在其中设置ListView中行的布局:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//ViewHolder holder;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.fraglist_item, parent, false);
Event e = getItem(position);
TextView title = (TextView) rowView.findViewById(R.id.title);
Date parsedstartdate = new Date();
Date parseenddate = new Date();
parsedstartdate.setTime(Long.parseLong(e.getStartdate())*1000);
parseenddate.setTime(Long.parseLong(e.getEnddate())*1000);
DateFormat df = DateFormat.getDateInstance();
title.setText(e.getTitle() + "\n" + df.format(parsedstartdate) + " - " + df.format(parseenddate));
CheckBox chb = (CheckBox) rowView.findViewById(R.id.savedtodbchb);
chb.setClickable(false);
ImageView picture = (ImageView) rowView.findViewById(R.id.picture);
Picasso.with(context).load(e.getPicurl()).error(R.drawable.blackwallpaperbackground_big).resize(400,500).into(picture);
picture.setColorFilter(Color.rgb(80,80,80), PorterDuff.Mode.MULTIPLY);
picture.setScaleType(ImageView.ScaleType.FIT_XY);
return rowView;
基本上我试图将事件添加到数据库,并且当它添加时它应该更新显示数据库中事件的活动中的列表。我得到了这个例外:
FATAL EXCEPTION: main
Process: com.vladmarton.eventaarhus, PID: 14022
java.lang.NullPointerException: Attempt to invoke virtual method 'android.widget.ListAdapter android.support.v4.app.ListFragment.getListAdapter()' on a null object reference
at com.vladmarton.eventaarhus.EventDetailsActivity$1.onClick(EventDetailsActivity.java:122)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
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)
也许我想念一些小东西,我已经尝试了另外两种方法来实现它,我在这里找到了stackoverflow,但没有一个帮助。我对ListFragments有很小的经验,它让我发疯,所以如果有人有任何想法,请评论:)谢谢
答案 0 :(得分:0)
您没有为片段设置标记,导致findFragmentById()
返回null。将XML片段更改为此标记以添加标记。
<fragment
android:id="@+id/fragment1"
android:name="com.example.exapmle.handlers.fragments.SavedEventsListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="fraglist1" />