简体   繁体   English

片段和列表视图

[英]Fragment and Listview

I'm trying to use a ListView and Fragment. 我正在尝试使用ListView和Fragment。

My Code: 我的代码:

public static class ownFragment extends Fragment
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MyListFragment test = new MyListFragment();
        test.makelist();
        return inflater.inflate(R.layout.whitelist_content, container, false);
    }

    public class MyListFragment extends ListFragment {

        private AdapterView.OnItemClickListener listener;


        public void makelist()
        {
            String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
                    "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
                    "Linux", "OS/2" };
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_1, values);
            setListAdapter(adapter);
        }

        public void setOnItemClickListener(AdapterView.OnItemClickListener l) {
            this.listener = l;
        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            if(listener != null) {
                listener.onItemClick(l, v, position, id);
            }
        }

}

}


            public void clickme(View view){
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                .replace(R.id.content_frame, new ownFragment())
                .commit();
             }

but so i get a NullPointerException 但是我得到了NullPointerException

enter code her07-26 22:57:46.709  19489-19489/de.anocom.ecp E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.NullPointerException
    at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
    at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:128)
    at de.anocom.ecp.MainActivity$Whitelist$MyListFragment.makelist(MainActivity.java:296)
    at de.anocom.ecp.MainActivity$ownFragment.onCreateView(MainActivity.java:282)
    at android.app.Fragment.performCreateView(Fragment.java:1695)
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
    at android.app.BackStackRecord.run(BackStackRecord.java:682)
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
    at android.os.Handler.handleCallback(Handler.java:730)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5103)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)e

First, you should not have the MyListFragment inner class. 首先,您不应具有MyListFragment内部类。 Make the outer class extend ListFragment and put all your list code there, and get rid of the inner class. 使外部类扩展ListFragment并将所有列表代码放在此处,并摆脱内部类。

Second, getActivity() will return null if the fragment is not attached to an Activity yet (hence the NullPointerException). 其次,如果该片段尚未附加到Activity,则getActivity()将返回null(因此为NullPointerException)。 Most of the time I wait until onActivityCreated() callback to do anything with the Activity, such as initializing the adapter. 大多数时候,我一直等到onActivityCreated()回调对Activity进行任何操作,例如初始化适配器。

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(SavedInstanceState)
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM