Venky
Venky

Reputation: 11107

OnClick is not firing for two Base Adapters

I am using a Custom List View that contains some Text Views and Horizontal List View.

All the View for Custom List View Populating correctly and OnClick Listeners working correctly.

Now i am using Second Base Adapter for Populating Horizontal List View that contains Images.

After Populating Horizontal List View i an trying to Click Relative Layout inside Horizontal List View, it is not firing.

Here is my Code :

public class ThreadListNewAdapter extends ArrayAdapter<Thread> {

private Context context;
private ImageLoader imageLoader;
private HorizontialListView horizontialListView;

public ThreadListNewAdapter(Context context, int textViewResourceId,
        List<CompressedThread> threadList) {

    super(context, textViewResourceId, threadList);
    this.context = context;
    imageLoader = new ImageLoader(context);

}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ImageView userImage;
    View myView = convertView;

    LayoutInflater inflater = (LayoutInflater) context // activity.getLayoutInflater();
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    myView = inflater.inflate(R.layout.popular_new, null);

    myView.setTag(threadId);

    final View view = myView; 

    if (mediaList.size() > 0) {
        imageLayout.setVisibility(View.VISIBLE);
        horizontialListView = (HorizontialListView) myView
                .findViewById(R.id.media_horizontal_view);
        horizontialListView.setAdapter(new ImageAdapter(mediaList)); //PLACE WHHERE I AM CALLING SECOND ADAPTER
    }

    view.setTag(position);
    view.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            onThreadClick(fThread);
        }
    });

    return myView;
}

class ImageAdapter extends BaseAdapter {

    List<Media> mediaList = new ArrayList<Media>();

    public ImageAdapter(List<Media> allMediaList) {
        mediaList = allMediaList;
    }

    @Override
    public int getCount() {
        return mediaList.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final int pos = position;
        ViewHolder holder;
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.inbox_horizontal_row,
                    null);
            holder.imageView = (ImageView) convertView
                    .findViewById(R.id.media_image_view);
            holder.commentLayout = (RelativeLayout) convertView
                    .findViewById(R.id.comment_layout);

            holder.commentLayout.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    Log.v("Clicked", "Clicked" + "" + pos);
                }

            }); // CLICK EVENT IS NOT FIRING HERE

            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.mediaId = position;
        return convertView;
    }
}

class ViewHolder {
    ImageView imageView;
    TextView commentText, likeText;
    RelativeLayout commentLayout;
    int mediaId;
}

}

Horizontal XML :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/media_image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <RelativeLayout
        android:id="@+id/like_comment_layout"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="bottom"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="10dp"
        android:background="#80000000"
        android:clickable="true"
        android:focusable="true" >

        <RelativeLayout
            android:id="@+id/comment_layout"
            android:layout_width="60dp"
            android:layout_height="30dp"
            android:orientation="horizontal" >

            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_alignParentLeft="true"
                android:layout_centerInParent="true"
                android:layout_marginLeft="5dp"
                android:src="@drawable/comment" />
           </RelativeLayout>
          </RelativeLayout>
        </FrameLayout>
    </LinearLayout>

Upvotes: 3

Views: 818

Answers (4)

Venky
Venky

Reputation: 11107

Finally i changed my approach to add horizontal images inside list view.

Before i tried by created new Adapter and inflating it , now i creating DYNAMIC TABLE LAYOUT and added images to it.

Place where i changed :

if (mediaList.size() > 0) {
   for (int i = 0; i < mediaList.size(); i++) {
       mediaInside = mediaList.get(i);
       LinearLayout row = (LinearLayout) inflater
                    .inflate(R.layout.inbox_horizontal_row,
                            dynamicMediaTable, false);
       final ImageView mediaImage = (ImageView) row
                    .findViewById(R.id.media_image_view);
       final RelativeLayout likeComment = (RelativeLayout) row
                    .findViewById(R.id.like_comment_layout);
       mediaImage.setImageDrawable(icon);

       dynamicMediaTable.addView(row);
       likeComment.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.v("Media Id Clicked", mediaImage.getTag()
                }
        });
    }

}

My Main XML :

<RelativeLayout
    android:id="@+id/image_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="65dp"
    android:layout_marginTop="10dp" >

    <HorizontalScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbars="none" >

        <TableLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <TableRow
                android:id="@+id/dynamic_table_row"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" />
        </TableLayout>
    </HorizontalScrollView>

    <ImageView
        android:id="@+id/inbox_reply_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginTop="5dp"
        android:src="@drawable/replybutton" />
</RelativeLayout>

My Dynamic Layout :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
    <ImageView
        android:id="@+id/media_image_view"
        android:layout_width="180dp"
        android:layout_height="240dp" />
</LinearLayout>

Upvotes: 1

Anh Tuan
Anh Tuan

Reputation: 1730

Can you post the content of your inbox_horizontal_row XML. And you can try to add this line in your RelativeLayout XML android:descendantFocusability="blocksDescendants" or android:descendantFocusability="beforeDescendants"

Upvotes: -1

Anh Tuan
Anh Tuan

Reputation: 1730

I think this situation is the parent layout (Horizontal List View) takes the click event which should be proceeded by the child view (the Relative Layout). Don't know if your HorizontalListView is extended from AbsListView or not, but you can try this code listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

Upvotes: 0

jeet
jeet

Reputation: 29199

make your relative layout clickable and focusable property to true, and all its children's false.

Upvotes: 1

Related Questions