android - 使用 SimpleAdapter 的 fragment 中的简单 ListView

标签 android listview android-fragments android-listfragment

这是我用于扩展 ListFragment 的 fragment 的代码,下面是它显示的错误。几乎相同的代码对于 Activity 工作正常,除了在 Activity 中我通过

ListView lv = getListView();

在 fragment 中通过

lv= (ListView)rootView.findViewById(R.id.list);

它在 java:109 行显示空指针异常 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() 如果我删除 setOnItemClickListener,它会在 lv.setAdapter(adapter); 上显示空指针异常 SoundCloudFragment.java

 public class SoundCloudFragment extends ListFragment {
        private ProgressDialog pDialog;
        private FragmentActivity myContext;
        ListView lv;
        @Override
        public void onAttach(Activity activity) {

            if (activity instanceof FragmentActivity) {
                myContext = (FragmentActivity) activity;


            }

            super.onAttach(activity);
        }





        // contacts JSONArray
        JSONArray contacts = null;

        // Hashmap for ListView
        ArrayList<HashMap<String, String>> contactList;


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // mVisulizerView = (VisualizerView)findViewById(R.id.visualizerView);

            View rootView = inflater.inflate(R.layout.soundcloud, container, false);
            lv= (ListView)rootView.findViewById(R.id.list);
            // Get ListView object from xml


     //   lv = getListView();

          lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id)
                {
                    // getting values from selected ListItem
                    String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
                    String cost = ((TextView) view.findViewById(R.id.email)).getText().toString();
                    String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString();

                    // Starting single contact activity
                    Intent in = new Intent(myContext,
                            SingleContactActivity.class);
                    in.putExtra("name", TAG_TITLE);
                    in.putExtra("id", cost);

                    startActivity(in);

                }
            });

            // Calling async task to get json
            new GetContacts().execute();
            return rootView;
        }
        private class GetContacts extends AsyncTask<Void, Void, Void>  {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // Showing progress dialog
                pDialog = new ProgressDialog(myContext);
                pDialog.setMessage("Please wait...");
                pDialog.setCancelable(false);
                pDialog.show();

            }

            @Override
            protected Void doInBackground(Void... arg0) {
                // Creating service handler class instance
                ServiceHandler sh = new ServiceHandler();

                // Making a request to url and getting response
                String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

                Log.d("Response: ", "> " + jsonStr);

                if (jsonStr != null) {
                    try {
                        JSONArray json = new JSONArray(jsonStr);

                        // looping through All Contacts
                        for (int i = 0; i < json.length(); i++) {
                            JSONObject jsonObj = json.getJSONObject(i);
                            //JSONObject c = contacts.getJSONObject(i);

                            String title = jsonObj.getString(TAG_TITLE);
                            String id = jsonObj.getString(TAG_ID);
                            String kind = jsonObj.getString(TAG_KIND);
                            String duration =jsonObj.getString(TAG_DURATION);
                        /*  String gender = c.getString(TAG_GENDER);

                            // Phone node is JSON Object
                            JSONObject phone = c.getJSONObject(TAG_PHONE);
                            String mobile = phone.getString(TAG_PHONE_MOBILE);
                            String home = phone.getString(TAG_PHONE_HOME);
                            String office = phone.getString(TAG_PHONE_OFFICE);*/

                            // tmp hashmap for single contact
                            HashMap<String, String> contact = new HashMap<String, String>();

                            // adding each child node to HashMap key => value
                            contact.put(TAG_TITLE, title);
                            contact.put(TAG_ID, id);
                            contact.put(TAG_KIND, kind);
                            contact.put(TAG_DURATION, duration);


                            // adding contact to contact list
                            contactList.add(contact);
                        }
                    } catch (JSONException e)
                    {
                        e.printStackTrace();
                    }
                } else {
                    Log.e("ServiceHandler", "Couldn't get any data from the url");
                }

                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                // Dismiss the progress dialog
                if (pDialog.isShowing())
                    pDialog.dismiss();
                /**
                 * Updating parsed JSON data into ListView
                 * */
                ListAdapter adapter = new SimpleAdapter(
                        myContext, contactList,
                        R.layout.soundcloud_item, new String[] { TAG_TITLE, TAG_ID,
                        TAG_KIND }, new int[] { R.id.name,
                        R.id.email, R.id.mobile });

              lv.setAdapter(adapter);

            }

        }


    }

错误-

 FATAL EXCEPTION: main
        java.lang.NullPointerException
                at com.peoplecloud.guggu.ui.fragment.SoundCloudFragment.onCreateView(SoundCloudFragment.java:109)
                at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:829)
                at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
                at android.app.BackStackRecord.run(BackStackRecord.java:635)
                at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397)
                at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
                at android.os.Handler.handleCallback(Handler.java:615)
                at android.os.Handler.dispatchMessage(Handler.java:92)
                at android.os.Looper.loop(Looper.java:153)
                at android.app.ActivityThread.main(ActivityThread.java:5086)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
                at dalvik.system.NativeStart.main(Native Method)

最佳答案

尝试这种方式,希望这能帮助您解决问题。

有两种方法可以给定 ListView id。

1.android 预定义的id 像:

XML

<ListView
   android:id="@android:id/list"

Activity

lv= (ListView) findViewById(android.R.id.list);

fragment

lv= (ListView)rootView.findViewById(android.R.id.list); 

2.自定义 id 如:

XML

<ListView
   android:id="@+id/list"

Activity

lv= (ListView) findViewById(R.id.list);

fragment

lv= (ListView)rootView.findViewById(R.id.list); 

关于android - 使用 SimpleAdapter 的 fragment 中的简单 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26668368/

相关文章:

android - ListView 中带有可点击 url 的可点击项目

c# - ListView + POCO

java - 如何控制(启用/禁用)Google Place 自动完成 fragment 编辑功能

android - 带有可折叠工具栏的 WebView? ( Material 设计)

java - 为什么我无法将包从 fragment 传递到 Activity

java - 将 opengl 纹理句柄从 Android Java 传递到 C++?

android - 按钮 setOnClickListener 不起作用

android - 如何在Android布局中布局不规则形状

android - 从最近和历史中排除 Activity

android - 如何更改 ListView 的颜色,交替行颜色?