获取列表视图行数据

问题描述:

我在application.I列表视图要设置的TextView的值中的特定行,当我点击该行中的TextView之一itself.so,我试着像下面

I have a listview in my application.I want to set the value of textview in that particular row when I click one of the textview in that row itself.so,I tried like below

likes.setOnClickListener(new OnClickListener() {


            public void onClick(View v) {

           TextView t=(TextView)v;
          TextView likesnumber1 = (TextView) findViewById(R.id.likesnumber);
            int i=  Integer.parseInt(likescount.get(position));

       if(like_or_ulike.get(position).equals("Like")){
            Log.e("inlike","like");
            like_or_ulike.set(position, "Unlike");
            t.setText(like_or_ulike.get(position));
            UrltoValue.getValuefromUrl("https://graph.facebook.com/"+objectid.get(position)+"/likes?access_token="+accesstoken+"&method="+"post");

           j=i+1;
           String s=Integer.toString(j);
        likescount.set(position, s);
         likesnumber1.setText(likescount.get(position));

        }
        else{
            Log.e("unlike","unlike");
            like_or_ulike.set(position, "Like");
            t.setText(like_or_ulike.get(position));
            UrltoValue.getValuefromUrl("https://graph.facebook.com/"+objectid.get(position)+"/likes?access_token="+accesstoken+"&method="+"DELETE");

               j=i-1;
             String s=Integer.toString(j);
            likescount.set(position, s);
             likesnumber1.setText(likescount.get(position));
        }
    }
});

the "likes" reference which I used is textview and I want to set the textview by getting the id of that particular row.


TextView likesnumber1 = (TextView) findViewById(R.id.likesnumber); 

当我使用这个我得到屏幕的第一个可见行的id。

when I use this I am getting the id of the first visible row of the screen.

我怎样才能得到特定行的TextView的id,在一个TextView点击。
 谢谢

How can I get the id of textview of that particular row,on a textview click. Thanks

我不知道你是如何填充数据列表,但这里是我用的方法效果非常好。

I'm not sure how you are populating your list with data, however here is a method I use that works very well.

数据模型

public class Publication {

public String string1;
public String string2;

public Publication()  {

}
public Publication(String string1, String string2) {
this.string1= string1;
this.string2= string2;
}


}

创建一个数组适配器

Create an array adapter

public class ContactArrayAdapter extends ArrayAdapter<ContactModel> {
private static final String tag = "ContactArrayAdapter";
private static final String ASSETS_DIR = "images/";
private Context context;
    //private ImageView _emotionIcon;
private TextView _name;
private TextView _email;
private CheckBox _checkBox;

private List<ContactModel> contactModelList = new ArrayList<ContactModel>();
public ContactArrayAdapter(Context context, int textViewResourceId,
                           List<ContactModel> objects) {
    super(context, textViewResourceId, objects);
    this.context = context;
    this.contactModelList = objects;
}

public int getCount() {
    return this.contactModelList.size();
}
public ContactModel getItem(int index) {
    return this.contactModelList.get(index);
}
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    if (row == null) {
        // ROW INFLATION
        Log.d(tag, "Starting XML Row Inflation ... ");
        LayoutInflater inflater = (LayoutInflater) this.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.contact_list_entry, parent, false);
        Log.d(tag, "Successfully completed XML Row Inflation!");
    }

    // Get item
   final ContactModel contactModel = getItem(position);
    Resources res = this.getContext().getResources();
        //Here are some samples so I don't forget...
        //
        //_titleCount = (TextView) row.findViewById(R.id.category_count);

        //  _category.setText(categories1.Category);
        //
        //if (categories1.Category.equals("Angry")) {
        //Drawable angry = res.getDrawable(R.drawable.angry);
        //_emotionIcon.setImageDrawable(angry);
        //}
    _checkBox = (CheckBox) row.findViewById(R.id.contact_chk);
    _email = (TextView) row.findViewById(R.id.contact_Email);
    _name = (TextView)row.findViewById(R.id.contact_Name);

     //Set the values
    _checkBox.setChecked(contactModel.IsChecked);
    _email.setText(contactModel.Email);
    _name.setText(contactModel.Name);

    _checkBox.setOnClickListener(new CompoundButton.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (contactModel.IsChecked) {
               contactModel.IsChecked = false;
               notifyDataSetChanged();
            }
            else {
                contactModel.IsChecked = true;
                notifyDataSetChanged();
            }

        }
    });

    return row;
}

}

使用数组适配器来填补你的列表

Use the array adapter to fill your list

   ContactArrayAdapter contactArrayAdapter;
   //
   List<ContactModel> contactModelList;
   //Fill list with your method
   contactModelList = getAllPhoneContacts();
   //
   contactArrayAdapter = new ContactArrayAdapter(getApplicationContext(),          R.layout.contact_list_entry, contactModelList);
   //
  setListAdapter(contactArrayAdapter);

一个样品方法来填充数据:

A sample method to fill data:

    public List<ContactModel> getAllPhoneContacts() {
    Log.d("START","Getting all Contacts");
    List<ContactModel> arrContacts = new Stack<ContactModel>();

    Uri uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
    Cursor cursor = getContentResolver().query(uri, new String[] {ContactsContract.CommonDataKinds.Email.DATA1
            ,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
            ,ContactsContract.CommonDataKinds.Phone._ID}, null , null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
    cursor.moveToFirst();
    while (cursor.isAfterLast() == false)
    {
        String email= cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
        String name =  cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        int phoneContactID = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));




        if (email != null)
        {
            ContactModel contactModel = new ContactModel();
            contactModel.Name = name;
            contactModel.Email = email;
            contactModel.IsChecked = false;
            arrContacts.add(contactModel);
        }

        cursor.moveToNext();
    }
    cursor.close();
    cursor = null;
    Log.d("END","Got all Contacts");
    return arrContacts;
}

访问上的点击数据

Accessing the data on click

final ListView lv = getListView();
        lv.setTextFilterEnabled(true);
        //Click handler for listview
    lv.setOnItemClickListener(new OnItemClickListener() {
       public void onItemClick(AdapterView parent, View view, int position, long id) {
            ContactModel contact= getItem(position);//This gets the data you want to change
            //
            some method here tochange set data
            contact.email = "new@email.com"
            //send notification
             contactArrayAdapter.notifyDataSetChanged();
        }
    });