从现有的 LazyAdapter 加载新的 LazyAdapter

Loading new LazyAdapter from existing LazyAdapter

好的,我们开始吧。我提供了完整的模型以避免质疑为什么你不这样做,或者这样..所以蓝色盒子只是膨胀 header 有效,在蓝色 header 下面我有 Activity ListView(绿色)填充了 LazyAdapter。每行(白色)都有按钮,单击这些按钮会打开对话框(黄色),其中另一个 ListView 填充了 LazyAdapterTwo(黑色)。

问题是我从第一个开始设置第二个适配器时出现空异常,所以我不知道问题出在哪里:listStatusComments.setAdapter(adapterStatusComments);

LazyAdapterStatus class

public class LazyAdapterStatus extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 
    ProgressDialog progressDialog;
    DatabaseHandler db = new DatabaseHandler(activity);
    ListView listStatusComments;
    LazyAdapterStatusComments adapterStatusComments;


    public LazyAdapterStatus(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.activity_main_list_row, null);

        final Dialog dialog = new Dialog(activity);

        TextView title = (TextView)vi.findViewById(R.id.activityStatus); 
        ImageButton comments = (ImageButton)vi.findViewById(R.id.comments_ico);

        comments.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HashMap<String, String> item = new HashMap<String, String>();
                item = data.get(position);

                dialog.setContentView(R.layout.dialog_status_comment);
                dialog.setTitle("Comment");
                String statusId = item.get(MainActivity.STATUS_ID);         
                new GetStatusCommentsTask().execute(statusId);
            }
        });
        HashMap<String, String> item = new HashMap<String, String>();
        item = data.get(position);


        title.setText(item.get(MainActivity.STATUS_TEXT));

       return vi;
    }

    public class GetStatusCommentsTask extends AsyncTask<String, Void, ArrayList<StatusComments>> {

        protected void onPreExecute() {         
            progressDialog  = new ProgressDialog(activity);
            progressDialog.setMessage("Loading");
            progressDialog.setCancelable(true);
            progressDialog.show();
        }

        protected ArrayList<StatusComments> doInBackground(String... arg0) {
            String response = null;
            try {
                try {
                    HttpParams httpParameters = new BasicHttpParams();
                    HttpConnectionParams.setConnectionTimeout(httpParameters, 15000);
                    HttpConnectionParams.setSoTimeout(httpParameters, 20000);
                    HttpClient client = new DefaultHttpClient(httpParameters);

                    HttpPost postReq = new HttpPost();
                    postReq.setURI(new URI(com.seventy.in.util.ClientUrls.GET_STATUS_COMMENTS_URL));
                    ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();                   

                    postParameters.add(new BasicNameValuePair(
                            "status_id", arg0[0]));

                    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
                            postParameters);


                    postReq.setEntity(formEntity);
                    HttpResponse httpResponse = client.execute(postReq);
                    if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                        response = NetworkUtil
                                .convertStreamToString(httpResponse.getEntity()
                                        .getContent());
                        Log.i("RESP", response);
                    }
                } catch (URISyntaxException e) {
                    e.printStackTrace();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                if (response != null && response != "") {

                    JSONObject myAwway = new JSONObject(response);
                    JSONArray jsonArrComments = myAwway.getJSONArray("status_comments");
                    ArrayList<StatusComments> commentsList = new ArrayList<StatusComments>(); 

                    for (int i = 0; i < jsonArrComments.length(); i++) {
                        StatusComments comment = StatusComments.fromJson(jsonArrComments
                                .getJSONObject(i));

                        if (comment.getCommentUserId() != null) {                           
                            commentsList.add(comment);
                        }
                    }

                    return commentsList;


                }
                else { 
                    return null;
                }

            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }

        }

        @Override
        protected void onPostExecute(ArrayList<StatusComments> result) {
            super.onPostExecute(result);
            progressDialog.dismiss();

            final Dialog dialog = new Dialog(activity);
            dialog.setContentView(R.layout.dialog_status_comment);
            dialog.setTitle("Patka");

            final ArrayList<HashMap<String, String>> postList = new ArrayList<HashMap<String, String>>();


            for (int i = 0; i < result.size(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                StatusComments e = result.get(i);
                map.put(MainActivity.COMMENT_USER_ID, e.getCommentUserId());
                map.put(MainActivity.KEY_IMAGE_URL, e.getUserImageUrl());
                map.put(MainActivity.STATUS_TEXT, e.getCommentText());

                postList.add(map);              
            }       


            listStatusComments = (ListView)dialog.findViewById(R.id.list);


            adapterStatusComments=new LazyAdapterStatusComments(activity, postList);
            listStatusComments.setAdapter(adapterStatusComments); 

        }
    }
}

LazyAdapterStatusComments

public class LazyAdapterStatusComments extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 

    public LazyAdapterStatusComments(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }


    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.friends_list_row, null);

        TextView title = (TextView)vi.findViewById(R.id.name); // title
        TextView about = (TextView)vi.findViewById(R.id.item_description); // artist name
        ImageView thumb_image=(ImageView)vi.findViewById(R.id.image_url); // thumb image

        HashMap<String, String> song = new HashMap<String, String>();
        song = data.get(position);

        // Setting all values in listview
        title.setText(song.get(MainActivity.STATUS_TEXT));  
        imageLoader.DisplayImage(song.get(MainActivity.KEY_IMAGE_URL), thumb_image);
        return vi;
    }
}

我发现了问题。代码运行完美,只是我忘记将列表元素输入到 xml 布局中,所以 listStatusComments = (ListView)dialog.findViewById(R.id.list);正在搜索不存在的元素