android - 如何在 fragment 类中绑定(bind)列表适配器

标签 android android-fragments android-listview

我有以下 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/

相关文章:

android - 异常调度输入事件和 SwipeRefreshLayout 下拉空指针异常

android - 以编程方式创建图像按钮

php - 是否可以在 Android 应用程序中处理来自 PHP 文件的 session

java - 当 AsyncTask 完成 Activity 时调用 fragment 方法

android - kotlin.TypeCastException : null cannot be cast to non-null type androidx. navigation.fragment.NavHostFragment 在 NavigationExtensionsKt

android - 在 ViewStub 中使用 ListView 时出现 NullPointerException

android - 带有 Viewpager 的 ListView 作为 TabPageIndicator 内的标题

java - Android Studio 无法解析 android.gms 包中缺少的常见符号

android - 在 Android 中保存长文本的最佳实践

android - 带工具栏的 Viewpager