由于我的ListView位于ScrollView中,并且ListView上方有一个复杂的布局,我不得不将该布局设置为ListView的标题。除了一件事之外,这使得工作非常有效:当ListView没有项目时,标题不显示。此标头基本上是整个布局的基础,ListView仅包含用户编写的注释。
我查看了this和this以及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;
}
请帮忙。
答案 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()
。
然后它应该可以正常工作。