OnClick не запускает два базовых адаптера - PullRequest
3 голосов
/ 20 февраля 2012

Я использую пользовательское представление списка, которое содержит некоторые текстовые представления и горизонтальное представление списка.

Все представления для настраиваемого представления списка заполнены правильно, а слушатели OnClick работают правильно.

Теперь я использую второй базовый адаптер для заполнения горизонтального списка, который содержит изображения.

После заполнения горизонтального представления списка при попытке щелкнуть «Относительное расположение» внутри горизонтального представления списка оно не запускается.

Вот мой код:

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;
}

}

Горизонтальный 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>

Ответы [ 4 ]

1 голос
/ 22 февраля 2012

Наконец, я изменил свой подход, чтобы добавить горизонтальные изображения в виде списка.

До того, как я попытался создать новый Адаптер и накачать его, сейчас я создаю ДИНАМИЧНУЮ ПЛАНШЕТНУЮ ТАБЛИЦУ и добавляю к ней изображения.

Место, где я изменился:

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()
                }
        });
    }

}

Мой основной 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>

Мой динамический макет:

<?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>
1 голос
/ 20 февраля 2012

делает ваш относительный макет кликабельным, а свойство фокуса - истинным, а все его дочерние - ложными.

0 голосов
/ 20 февраля 2012

Можете ли вы опубликовать содержимое вашего inbox_horizont_row XML. И вы можете попробовать добавить эту строку в свой RelativeLayout XML android:descendantFocusability="blocksDescendants" или android:descendantFocusability="beforeDescendants"

0 голосов
/ 20 февраля 2012

Я думаю, что в этой ситуации родительский макет (горизонтальное представление списка) принимает событие щелчка, которое должно выполняться дочерним представлением (относительный макет). Не знаю, расширен ли ваш HorizontalListView из AbsListView или нет, но вы можете попробовать этот код listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

...