Domanda

Sto usando una vista elenco personalizzata che contiene alcune viste di testo e visualizzazione dell'elenco orizzontale.

Tutta la visualizzazione per la visualizzazione personalizzata che popola correttamente e gli ascoltatori di OnClick funzionano correttamente.

Ora sto usando l'adattatore di seconda base per la vista dell'elenco orizzontale che contiene immagini.

Dopo aver popolato la vista dell'elenco orizzontale I Un tentativo di fare clic sul layout relativo all'interno della visualizzazione dell'elenco orizzontale, non è sparato.

Ecco il mio codice:

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 orizzontale:

<?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>
È stato utile?

Soluzione 2

Finalmente ho cambiato il mio approccio per aggiungere immagini orizzontali all'interno della vista elenco.

Prima di provare creando un nuovo adattatore e gonfiandolo, ora creo il layout della tabella dinamica e ho aggiunto immagini.

Posto dove ho cambiato:

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

}

Il mio XML principale:

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

Il mio layout dinamico:

<?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>

Altri suggerimenti

Rendi la proprietà relativa a layout cliccabile e focalizzabile su True e tutti i suoi figli sono falsi.

Penso che questa situazione sia il layout dei genitori (vista dell'elenco orizzontale) prende l'evento Click che dovrebbe essere proceduto dalla vista figlio (il layout relativo). Non so se il tuo orizzontallistview è esteso da AbsListView o no, ma puoi provare questo codice listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

Puoi pubblicare il contenuto della tua Inbox_Horizontal_Row XML. E puoi provare ad aggiungere questa riga nel tuo XML relativayout android:descendantFocusability="blocksDescendants" o android:descendantFocusability="beforeDescendants"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top