Hello,
I declared (partial) success prematurely. Below you will find a copy
of:
1) getView
2) ViewHolder
3) layout xml file
I still have not been able to wire all buttons in the list.
I obtain the (incorrect) position of the button which is wired via the
statements
kill2.setTag(new Integer(position));
found after the if/else block
and
Integer itemPosition = (Integer) v.getTag();
found in the onClick block
note my unsuccessful attempts at retrieving the position of the
clicked button commented out in the onClick block:
/*
ViewHolder holder1 = new ViewHolder();
holder1 = (ViewHolder) ((View)
v.getParent
()).getTag();
Integer itemPosition = holder1.pos;
*/
//Integer itemPosition=(Integer)((View)
v.getParent()).getTag();
Clearly, I am missing something pretty basic, yet I can't see what it
is. I tried to model my getView, viewHolder, and XML file after
List14.java in the Android sample APIs, and the sample code in the
Fancy Lists tutorial 4.
I would appreciate any comments/insights/suggestions.
Thanks.
Alex Donnini
public View getView(int position, View convertView, ViewGroup
parent) {
// A ViewHolder keeps references to children views to
avoid unneccessary calls
// to findViewById() on each row.
ViewHolder holder;
Button kill2;
System.out.println("**************************position --
"+position);
// When convertView is not null, we can reuse it directly,
there is no need
// to reinflate it. We only inflate a new View when the
convertView supplied
// by ListView is null.
try
{
if (convertView == null)
{
System.out.println("**************************view is
empty");
convertView = mInflater.inflate
(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
kill2 = (Button) findViewById(R.id.kill2);
View.OnClickListener k2 = new View.OnClickListener
()
{
public void onClick(View v)
{
try
{
/*
ViewHolder holder1 = new ViewHolder();
holder1 = (ViewHolder) ((View)
v.getParent
()).getTag();
Integer itemPosition = holder1.pos;
*/
//Integer itemPosition=(Integer)((View)
v.getParent()).getTag();
Integer itemPosition = (Integer)
v.getTag();
System.out.println
("**************************itemPosition - "+itemPosition);
checkMap(activityList.get(itemPosition));
//System.out.println("rebuilding list after item
was removed via new screen");
fromMaptoList();
//System.out.println("displaying list after item
was removed");
displayList();
notifyDataSetChanged();
}
catch(Exception e)
{
e.printStackTrace();
}
}
};
kill2.setOnClickListener(k2);
holder.text = (TextView) convertView.findViewById
(R.id.text);
holder.icon = (ImageView) convertView.findViewById
(R.id.icon);
holder.button = (Button) convertView.findViewById
(R.id.kill2);
holder.pos = position;
convertView.setTag(holder);
}
else
{
System.out.println("**************************list is
already populated");
holder = (ViewHolder) convertView.getTag();
kill2 = (Button) findViewById(R.id.kill2);
}
System.out.println("**************************beginning
item processing phase");
// Bind the data with the holder.
kill2.setTag(new Integer(position));
String item = (String)getItem(position);
holder.text.setText(item);
holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 :
mIcon2);
holder.pos = position;
System.out.println("**************************holder.pos -
"+holder.pos);
}
catch(Exception e)
{
e.printStackTrace();
}
return convertView;
}
//I do not use all fields in ViewHolder
static class ViewHolder {
TextView text;
ImageView icon;
ListView list;
Button button;
int pos;
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/
android"
android:id="@+id/layout"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="15sp"
>
<Button android:id="@+id/kill2"
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/list_8_kill2"/>
<ImageView android:id="@+id/icon"
android:layout_width="48dip"
android:layout_height="48dip" />
<TextView android:id="@+id/text"
android:layout_gravity="center_vertical"
android:layout_width="0dip"
android:layout_weight="1.0"
android:layout_height="wrap_content"
android:textSize="15sp"
/>
</LinearLayout>
On Nov 19, 9:44 am, Mark Murphy <[EMAIL PROTECTED]> wrote:
> for android wrote:
> > Hey i have got a similar prb,but i dont exactly understand what u
> > mean by "* When your button
>
> > clicks, get the ViewHolder from the button's parent, get the position
> > out of the ViewHolder, and use that position."
>
> I though it was fairly self-explanatory:
>
> -- Add an OnClickListener to your Button
> -- In the OnClickListener, call getParent() on the Button to get the
> LinearLayout that contains it
> -- Then call getTag() on the LinearLayout and cast it to be the ViewHolder
> -- Then get the position out of the ViewHolder
> -- Then use that position
>
> --
> Mark Murphy (a Commons Guy)http://commonsware.com
>
> Android Training on the Ranch! -- Mar 16-20,
> 2009http://www.bignerdranch.com/schedule.shtml
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---