2013-04-23 2 views
0

У меня есть gridview, который заполняет информацию контакта (изображение, имя и номер телефона) с помощью пользовательского адаптера. При щелчке по определенному элементу я хочу получить информацию контакта (информация об изображении, имя и номер телефона). Я знаю, что мне нужно использовать setTag() и getTag(), но я не могу понять, как это сделать. Вот мой код .. методonItemClick - Получить элемент в позиции из GridView с помощью CustomAdapter

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

Изменить это inItemClick

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

Ок .. я попробую .. –

+0

Спасибо много он работал ... Просто небольшое изменение в phNumber = PHONENUMBER, измененные в contactViewHolder.phNumber = PHONENUMBER; –

+0

Я думаю, что это не очень хороший способ справиться с этой задачей. Это осложнило бы, когда несколько парм и массивов удерживали эти значения –

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() –

+0

покажите свой класс активности, в котором вы звоните данные обмена сетью –

Смежные вопросы