OnClick 不会针对两个基本适配器触发
我正在使用包含一些文本视图和水平列表视图的自定义列表视图。
自定义列表视图的所有视图都正确填充,并且 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>
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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我认为这种情况是父布局(水平列表视图)接受了应该由子视图(相对布局)进行的单击事件。不知道你的HorizontalListView是否是从AbsListView扩展的,但你可以尝试这个代码
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
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);
您可以发布 inbox_horizontal_row XML 的内容吗?您可以尝试在RelativeLayout XML
android:descendantFocusability="blocksDescendants"
或android:descendantFocusability="beforeDescendants"
中添加这一行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"
orandroid:descendantFocusability="beforeDescendants"
将相对布局的可点击和可聚焦属性设置为 true,并将其所有子属性设置为 false。
make your relative layout clickable and focusable property to true, and all its children's false.
最后我改变了在列表视图中添加水平图像的方法。
在我尝试创建新的适配器并使其膨胀之前,现在我创建动态表布局并向其中添加图像。
我更改的地方:
我的主要 XML:
我的动态布局:
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 :
My Main XML :
My Dynamic Layout :