我有以下 fragment 类:
public class Home extends Fragment {
public static final String TAG = Home.class.getSimpleName();
public static HomenewInstance() {
return new Home();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.Homegrag, container, false);
return v;
}
}
当我使用它时,它工作得很好。但是当我在这个类中添加下面的代码时,它会给我错误:
public class Home extends Fragment {
private List<RowItem> rowItems;
private static Integer[] images = { R.drawable.red, R.drawable.red,
R.drawable.red, R.drawable.red, R.drawable.red, R.drawable.red,
R.drawable.red, R.drawable.red };
public static final String TAG = Home.class.getSimpleName();
public static HomenewInstance() {
return new Home();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.Homegrag, container, false);
ListView lv = (ListView) getActivity().findViewById(R.id.myList);
rowItems = new ArrayList<RowItem>();
String[] titles = { "Movie1", "Movie2", "Movie3", "Movie4", "Movie5",
"Movie6", "Movie7", "Movie8" };
String[] descriptions = { "First Movie", "Second movie", "Third Movie",
"Fourth Movie", "Fifth Movie", "Sixth Movie", "Seventh Movie",
"Eighth Movie" };
// Populate the List
for (int i = 0; i < titles.length; i++) {
RowItem item = new RowItem(images[i], titles[i], descriptions[i]);
rowItems.add(item);
}
// Set the adapter on the ListView
LazyAdapter adapter = new LazyAdapter(getActivity()
.getApplicationContext(), R.layout.list_row, rowItems);
lv.setAdapter(adapter);
lv.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
return v;
}
}
然后它会在 lv.setAdapter(adapter);
日志:
FATAL EXCEPTION: main
Process: com.paulusworld.drawernavigationtabs, PID: 11867
java.lang.NullPointerException
at com.paulusworld.drawernavigationtabs.Rush.onCreateView(Rush.java:55)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5333)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
我该怎么做?我想用 lazyadapter 绑定(bind)列表。
最佳答案
改变这个
ListView lv = (ListView) getActivity().findViewById(R.id.myList);
到
ListView lv = (ListView) v.findViewById(R.id.myList);
getActivity()
表示 Fragment
的当前上下文,而返回的 View 表示作为初始化您的 View
的引用。
关于android - 如何在 fragment 类中绑定(bind)列表适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30181606/