OnClick non sta sparando per due adattatori di base
-
28-10-2019 - |
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>
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"