简体   繁体   English

如何从android中的listView获取选定视图?

[英]How to get Selected view from the listView in android?

I had created a custom list view.我创建了一个自定义列表视图。 i added a list of contact details using custom adapter by subclassing the arrayadapter.我通过继承 arrayadapter 使用自定义适配器添加了一个联系人详细信息列表。 if i select the particular contact in the list means i need to get that selected details.如果我选择列表中的特定联系人意味着我需要获取所选的详细信息。 how can i achieve this.我怎样才能做到这一点。 here my coding,这是我的编码,

public class ContactListAdapter extends ArrayAdapter<ContactList> {

    Context context;
    int layoutResourceId;
    ContactList objects[] = null;

    View row;

    public ContactListAdapter(Context context, int layoutResourceId, ContactList[] objects) {
        super(context, layoutResourceId, objects);
        // TODO Auto-generated constructor stub

        this.context = context;
        this.layoutResourceId = layoutResourceId;
        this.objects = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        row = convertView;
        final ContactListHolder holder;

        if ( row == null ) {

            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new ContactListHolder();
            holder.image    = (ImageView) row.findViewById(R.id.contactImage);
            holder.name     = (TextView) row.findViewById(R.id.contactName);
            holder.number   = (TextView) row.findViewById(R.id.contactNumber);
            holder.check    = (CheckBox) row.findViewById(R.id.selectedContact);
            holder.check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    // TODO Auto-generated method stub


                }
            });

            row.setTag(holder);
            holder.check.setTag(objects[position]);

        } else {

            holder = (ContactListHolder) row.getTag();
            holder.check.setTag(objects[position]);
        }

        ContactList contact = objects[position];
        if(contact.imageIcon != null) {

            Bitmap imgBitmap = BitmapFactory.decodeByteArray(contact.imageIcon, 0, contact.imageIcon.length);
            holder.image.setImageBitmap(imgBitmap);
        } else {

            holder.image.setImageResource(R.drawable.ic_launcher);
        }

        holder.name.setText(contact.name);
        holder.number.setText(contact.number);
        holder.check.setChecked(objects[position].isSelected());    

        return row;

    }

    static class ContactListHolder {

        ImageView image;
        TextView name;
        TextView number;
        CheckBox check;
    }
}

in the manin activity i used the list view as,在 manin 活动中,我使用了列表视图,

ContactList contactList[] = new ContactList[MyTrackList.size()];

            for(int i=0;i<MyTrackList.size();i++) {

                MyContact contact = MyTrackList.get(i);
                contactList[i] = new ContactList(contact.getName(), contact.getNumber(), contact.getImage());

            }

            ContactListAdapter adapter = new ContactListAdapter(this, R.layout.manage_track_list_custom_view, contactList);

            trackList = (ListView) findViewById(R.id.manage_track_listView);
            trackList.setAdapter(adapter);

here Contact list is a class which has many objects.这里的联系人列表是一个有很多对象的类。

i tried by this way but its not work out.我通过这种方式尝试过,但没有成功。 please guide me.请指导我。 thanks in advance.提前致谢。

set setOnItemClickListener or setOnItemSelectedListener to list and you will get the call on item clicked and selected...setOnItemClickListenersetOnItemSelectedListener设置为列表,您将获得对单击和选择的项目的调用...

 setOnItemClickListener

Register a callback to be invoked when an item in this AdapterView has been clicked.注册一个回调以在单击此 AdapterView 中的项目时调用。

trackList.setOnItemClickListener(new OnItemClickListener() 
   {
   public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
   {
              contact =  contactList[position]          
   }
 });

.. ..

setOnItemSelectedListener

Register a callback to be invoked when an item in this AdapterView has been selected.注册一个回调以在选择了此 AdapterView 中的项目时调用。

 trackList.setOnItemSelectedListener(new OnItemSelectedListener() 
            {
                public void onItemSelected(AdapterView<?> parent, View view, int position, long i) 
                {
                      // TODO Auto-generated method stub

                                   contact =  contactList[position] 
                                   //   or 
                                // Object obj= parent.getItemAtPsotion(position);
                }

                @Override
                public void onNothingSelected(AdapterView<?> arg0) {
                    // TODO Auto-generated method stub

                }
            });

First I would define an onclick listener in an XML layout for displaying the list items.首先,我将在 XML 布局中定义一个 onclick 侦听器以显示列表项。 This is done by adding the attribute android:onClick="methodName" to the top-level layout view.这是通过将属性android:onClick="methodName" 添加到顶级布局视图来完成的。

Then in your main activity you need to implement the method defined in your XML layout (ie methodName( View v )), which will get called when a user taps on a list item.然后在您的主要活动中,您需要实现在您的 XML 布局中定义的方法(即 methodName( View v )),当用户点击列表项时将调用该方法。

Try this,试试这个,

  1. Use onItemClickListener()使用onItemClickListener()

eg:例如:

ListView lv = (ListView)findViewById(R.id.myList);

lv.setOnItemClickListener(new OnItemClickListener() {

public void onItemSelected(AdapterView<?> parent, View view, int position, long i) 
            {
                  // Get the item here
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM