2013-04-23 53 views
0

我有一个使用自定义适配器填充联系人信息(图像,名称和电话号码)的gridview。点击特定项目时,我想要检索联系人的信息(图像信息,姓名和电话号码)。我知道我必须使用setTag()和getTag(),但我无法弄清楚如何做到这一点。这里是我的代码..自定义适配器的onItemClick - 使用CustomAdapter从GridView获取位置的项目

getView方法

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ContactViewHolder contactViewHolder; 
    if (convertView == null) { 
     LayoutInflater li = getLayoutInflater(); 
     convertView = li.inflate(R.layout.activity_grid_one_item, null); 
     contactViewHolder = new ContactViewHolder(); 
     contactViewHolder.imgContact = (ImageView) convertView 
       .findViewById(R.id.imgViewContactImage); 
     contactViewHolder.txtViewContactName = (TextView) convertView 
       .findViewById(R.id.txtViewContactName); 
     contactViewHolder.txtViewPhoneNumber = (TextView) convertView 
       .findViewById(R.id.txtViewPhoneNumber); 
     convertView.setTag(contactViewHolder); 
    } else { 
     contactViewHolder = (ContactViewHolder) convertView.getTag(); 
    } 
    curObj.moveToPosition(position); 
    String name = curObj.getString(curObj.getColumnIndex("name")); 
    if (name != null) 
     contactViewHolder.txtViewContactName.setText(name); 
    else 
     contactViewHolder.txtViewContactName.setText("Unknown"); 
    String phoneNumber = curObj.getString(curObj.getColumnIndex("number")); 

    if (phoneNumber != null) 
     contactViewHolder.txtViewPhoneNumber.setText(phoneNumber); 
    else 
     contactViewHolder.txtViewPhoneNumber.setText("Unknown"); 

      String image = curObj.getString(curObj.getColumnIndex("image")); 

    if(image.equalsIgnoreCase("R.drawable.addcontactsmall2")) 
      contactViewHolder.imgContact.setImageResource(R.drawable.addcontactsmall2); 
    else 
    { 
     Uri uri = Uri.parse(image); 
     contactViewHolder.imgContact.setImageURI(uri); 
    } 
    return convertView; 
} 

public class ContactViewHolder { 
    ImageView imgContact; 
    TextView txtViewContactName; 
    TextView txtViewPhoneNumber; 
} 

onItemClick方法

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    View view = (View) arg1.getTag(arg2); 
    TextView txtPhoneNumber = (TextView) view.findViewById(R.id.txtview_addcontact_phonenumber); 
    System.out.println(txtPhoneNumber.getText().toString()); 
} 

我知道上面的代码不工作,(和它没有工作,以及,如预期,我得到一个空指针异常),所以如果任何人可以指导我如何做到这一点,这将有很大的帮助..

回答

0

改变这onItemClickClick

ContactViewHolder view = (ContactViewHolder) arg1.getTag(); 
String number = view.getPhNumber(); 

和ViewHolder

public class ContactViewHolder { 
    ImageView imgContact; 
    TextView txtViewContactName; 
    TextView txtViewPhoneNumber; 

    String phNumber; 
    public String getPhNumber() { 
     return phNumber; 
    } 
} 

添加此在getView添加此()

String phoneNumber = curObj.getString(curObj.getColumnIndex("number")); 
phNumber = phoneNumber ; 

添加相同的代码用于剩余PARAMS。它会工作。

+0

好吧..让我试试.. – 2013-04-23 12:37:48

+0

非常感谢它的工作...只是在phNumber = phoneNumber的一个小的变化,改为contactViewHolder.phNumber = PHONENUMBER; – 2013-04-23 12:41:57

+0

我认为它不是一个很好的方法来处理这个任务。当多个参数和数组持有该值 – 2013-04-23 12:44:56

0

您可以在setOnItemClickListener以及setOnClickListener中获得自定义网格项。

public ImageView img; 

your_grid.setOnItemClickListener(new OnItemClickListener() 
    { 
     public void onItemClick(AdapterView<?> parent, View v, final int position, long id) 
      { 
       img = (ImageView)v.findViewById(R.id.grid_item_image); 
      } 
    }); 
+1

它没有工作时,我会得到NullPointerException在findViewById() – 2013-04-23 12:34:19

+0

显示您所在的活动类电网ans共享数据 – 2013-04-23 12:36:43

相关问题