即使ListView没有项目,也显示ListView标题

时间:2015-01-20 20:02:21

标签: android listview android-listview

由于我的ListView位于ScrollView中,并且ListView上方有一个复杂的布局,我不得不将该布局设置为ListView的标题。除了一件事之外,这使得工作非常有效:当ListView没有项目时,标题不显示。此标头基本上是整个布局的基础,ListView仅包含用户编写的注释。

我查看了thisthis以及this等其他解决方案,但我仍然不知道该怎么做。

这就是我为ListView设置标题的方法:

lv = (ListView) findViewById(R.id.bucket_profile_lv);
LayoutInflater inflater=getLayoutInflater();
header = inflater.inflate(R.layout.bucket_profile_header,null,false);
lv.addHeaderView(header);

当我下载标题的数据时,它与ListView的适配器无关。我将它们称为

num_added = response.getString("NUM_ADDED");
tv_num_added.setText(String.valueOf(num_added));

其中

tv_num_added = (TextView) header.findViewById(R.id.bucket_profile_bucket_no_added);

当我下载评论时,我将结果(用户名,照片,评论等)放在数组中并将它们链接到适配器:

if (response.length() > 10) {
        try {
            jArray = new JSONArray(response);
            for(int i=0;i<jArray.length();i++){
            JSONArray innerJsonArray = jArray.getJSONArray(i);

            for(int j=0;j<innerJsonArray.length();j++){  
                                JSONObject jsonObject = innerJsonArray.getJSONObject(j);

                                arr_tips_id.add(jsonObject.getString("COMMENTID"));
                                arr_tips_userid.add(jsonObject.getString("ID"));
                                arr_tips_username.add(jsonObject.getString("USERNAME"));
                                arr_tips_userphoto.add(jsonObject.getString("PHOTO"));
                                arr_tips_fbuserid.add(jsonObject.getString("FB_USERID"));
                                arr_tips_imagetype.add(jsonObject.getString("IMAGE_TYPE"));
                                arr_tips_twuserid.add(jsonObject.getString("TW_USERID"));
                                arr_tips_twphoto.add(jsonObject.getString("TW_PHOTO"));
                                arr_tips_tips.add(jsonObject.getString("COMMENT"));
                                arr_tips_date.add(jsonObject.getString("TIMEDIFF"));

                                myadapter = new MyAdapter(BucketProfileActivity.this, arr_tips_id, arr_tips_userid, arr_tips_username, arr_tips_userphoto, arr_tips_fbuserid, arr_tips_imagetype, arr_tips_twuserid, arr_tips_twphoto, arr_tips_tips, arr_tips_date);
                                lv.setAdapter(myadapter);
                                lv.setVisibility(View.VISIBLE);
                            }
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                    /*Calendar c = Calendar.getInstance();
                    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SSS");
                    String strDate = sdf.format(c.getTime());
                    Toast.makeText(BucketProfileActivity.this, "3 -- " + strDate + "", Toast.LENGTH_LONG).show();*/
         } else {
            Toast.makeText(BucketProfileActivity.this, "No comments, how to show header?", Toast.LENGTH_SHORT).show();
            lv.setVisibility(View.VISIBLE);
    }

在我的适配器中,我覆盖了isEmpty(),但它没有帮助:

@Override
public boolean isEmpty() {
   return false;
}

请帮忙。

2 个答案:

答案 0 :(得分:1)

不要使用addHeaderView。而是将标题作为单独的项目

<LinearLayout
  ...
  android:orientation="vertical">

  <include layout="@layout/bucket_profile_header" />

  <ListView
     .....
  />

</LinearLayout>

答案 1 :(得分:0)

初始化您的适配器一次,例如,当您在onCreate()onCreateView()中夸大视图时,并将适配器设置为列表视图(在添加headerView之后)。

在您的JSON迭代循环中,执行以下操作:

myadapter.addItem(arr_tips_date);

在您的适配器中,您必须创建此方法,将您的数据项添加到其内部适配器集合并调用notifyDataSetChanged()

然后它应该可以正常工作。