tags:

views:

431

answers:

2

Hi, i'm trying to make (for learning purposes) my own implementation of a simple AdapterView where items comes from an basic Adapter (ImageAdapter from sdk samples).

Actual code is like this:

public class MyAdapterView extends AdapterView<ImageAdapter> implements AdapterView.OnItemClickListener{
private ImageAdapter mAdapter;
public MyAdapterView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    initThings();
}
private void initThings(){
    setOnItemClickListener(this);
}
@Override
public ImageAdapter getAdapter() {
    // TODO Auto-generated method stub
    return mAdapter;
}
@Override
public void setAdapter(ImageAdapter adapter) {
    // TODO Auto-generated method stub
    mAdapter=adapter;
    requestLayout();
}
View obtainView(int position) {
    View child = mAdapter.getView(position, null, this);
    return child;
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
 super.onLayout(changed, l, t, r, b);
    for(int i=0;i<mAdapter.getCount();i++){
        View child = obtainView(i);
        child.layout(10, 70*i, 70, 70);
        addViewInLayout(child, i, null, true);
    }
    this.invalidate();
}
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    Log.d("MYEXAMPLES","Clicked an item!");
}

}

This isn't a coding masterpiece, it just displays a pseudo-listview with pictures. I know i could've used ListView, GridView, Spinner, etc. but i'm relative new to android and i'm trying to figure out some things on it.

Well, the question here is: Why is my onItemClick not firing?

Using the same ImageAdapter with a GridView, everything works ok, but when i use with above class, i get nothing. Inside AdapterView.java there is code for those click, longclick, etc events... so why can't i just fire them? Maybe i'm misunderstanding basic things on how AdapterView works? Should I extend other base classes instead? And why?

Hoping to find more experienced guidance on here, thanks in advance.

A: 

Instead of extending the AdapterView, why dont you try with the baseAdapter. When you costumize your Adapter, it has oen method given below.

getView(int position, View convertView,ViewGroup group) 

in above method you can access the layout for each list item of the listview and here you can set the all supported events for each control.

Rahul Patel
I knew about putting my own onClick listeners for each view on the adapter, but is it acceptable? I also could do that inside my class adding onClickListeners to every child after "addViewInLayout"...But I thought The adapter should manage only "items" and the view (AdapterView) should manage the position, events, and so on...Is the same ListView/GridView do... their hierarchy goes from AdapterView->AbsListView->ListView, so i thought i could do something similar but it doesn't work...
Ander Webbs
A: 

A collegue of mine at Sony Ericsson just started a tutorial series on how to make your own AdapterView. You can find it here: http://blogs.sonyericsson.com/developerworld/2010/05/20/android-tutorial-making-your-own-3d-list-part-1/

Andreas Agvard