我有一个惯例,现在正确显示我的所有联系人。我也在检查jsonobject中的一些条件,以在listview中显示一些图像。这很好。
现在我想实现这一目标,而不是显示一个或另一个图像,整行显示或不显示。
确定条件的部分如下
JSONObject c;
try {
c = android.getJSONObject(position);
error = c.getString(TAG_ERROR);
if(Integer.parseInt(c.getString(TAG_ERROR)) == 0) {contactViewHolder.imgTiene
.setImageResource(R.drawable.ic_launcher);}
if(Integer.parseInt(c.getString(TAG_ERROR)) == 1) {contactViewHolder.imgTiene
.setImageResource(R.drawable.ic_action_cancel);}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
所以如果结果为1,我不希望显示该行。
listview的代码如下
@覆盖 public View getView(int position,View convertView,ViewGroup parent){ // TODO自动生成的方法存根
// View MyView = convertView;
ContactViewHolder contactViewHolder;
if (convertView == null) {
// Inflate the layout
LayoutInflater li = getLayoutInflater();
convertView = li.inflate(
R.layout.contactos_list_item, null);
contactViewHolder = new ContactViewHolder();
contactViewHolder.imgContact = (ImageView) convertView
.findViewById(R.id.flag);
contactViewHolder.txtViewContactName = (TextView) convertView
.findViewById(R.id.txtView_name);
contactViewHolder.txtViewPhoneNumber = (TextView) convertView
.findViewById(R.id.txtview_number);
//contactViewHolder.txtViewError = (TextView) convertView
// .findViewById(R.id.txtview_check);
contactViewHolder.imgTiene = (ImageView) convertView
.findViewById(R.id.flag2);
convertView.setTag(contactViewHolder);
} else {
contactViewHolder = (ContactViewHolder) convertView.getTag();
}
cur.moveToPosition(position);
name = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
if (name != null)
contactViewHolder.txtViewContactName.setText(name);
else
contactViewHolder.txtViewContactName.setText("Unknown");
// Add Phone Number //
String phoneNumber = cur
.getString(cur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (phoneNumber != null)
contactViewHolder.txtViewPhoneNumber.setText(phoneNumber);
else
contactViewHolder.txtViewPhoneNumber.setText("Unknown");
Uri uri = getPhotoUri(Long.parseLong(fetchContactIdFromPhoneNumber(phoneNumber)));
if (uri != null) {
contactViewHolder.imgContact.setImageURI(uri);
if (contactViewHolder.imgContact.getDrawable() == null){contactViewHolder.imgContact.setImageResource(R.drawable.ic_action_person);}
} else {
contactViewHolder.imgContact
.setImageResource(R.drawable.ic_action_person);
}
JSONObject c;
try {
c = android.getJSONObject(position);
error = c.getString(TAG_ERROR);
if(Integer.parseInt(c.getString(TAG_ERROR)) == 0) {contactViewHolder.imgTiene
.setImageResource(R.drawable.ic_launcher);}
if(Integer.parseInt(c.getString(TAG_ERROR)) == 1) {contactViewHolder.imgTiene
.setImageResource(R.drawable.ic_action_cancel);}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//contactViewHolder.txtViewError.setText(error);
return convertView;
}
我应该如何调整返回的内容? 我尝试使用布尔值和设置,if()返回convertView,但它不允许它。
进一步搜索我发现你可以改变膨胀
if(condition)
{
convertView=layoutInflater.inflate(R.layout.row_null,null);
return convertView;
}
else
{
convertView=layoutInflater.inflate(R.layout.row_content,null);
return convertView;
}
我应该把这个if()?
放在哪里感谢所有人的帮助
答案 0 :(得分:0)
这是一种更好的方法。不得不测试它自己是不是确定它是否工作但是在看到之后我们可以让它看不见我认为这应该有效。
if (result == 1) {
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.height = 0;
convertView.setLayoutParams(params);
}
答案 1 :(得分:0)
这可能有效
在布局文件夹中创建null_item
并通过inlfate返回,如
if((Integer.parseInt(c.getString(TAG_ERROR)) == 1)
{
return inflater.inflate(R.layout.null_item, null);
}
return convertView;
<强> null_item.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</LinearLayout>