2012-02-20 58 views
3

我正在使用包含一些文本视图和水平列表视图的自定义列表视图。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> 

回答

1

最后,我改变了我的方法,在列表视图中添加水平图像。

在我尝试通过创建新的适配器和充气它,现在我创建DYNAMIC TABLE LAYOUT并添加图像。

地方我改:

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

让你的相对布局可点击和可聚焦的属性设置为true,和它的所有孩子们的假。

+0

对不起队友,不工作:( – Venky 2012-02-20 06:04:15

+0

集inageview的点击,和可以将相对布局内的可聚焦属性设为false。 – jeet 2012-02-20 06:53:37

0

我认为这种情况是父级布局(水平列表视图)采用应该由子视图(相对布局)进行的点击事件。不知道您的Horizo​​ntalListView是否从AbsListView扩展而来,但您可以试试这个代码listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

+0

不工作,任何其他解决方案? – Venky 2012-02-20 06:09:31

-1

您可以发布您的inbox_horizo​​ntal_row XML的内容。您可以尝试在您的RelativeLayout XML中添加此行android:descendantFocusability="blocksDescendants"android:descendantFocusability="beforeDescendants"

+0

而不是发布另一个答案,您应该编辑您的[第一个答案](http://stackoverflow.com/a/9356848/593709)。 – 2012-02-20 06:21:11

+0

@AdilSoomro请检查我的问题 – Venky 2012-02-20 06:24:02

+0

谢谢。我考虑过编辑我的答案,但我认为这个答案与prev答案并不真正相关,所以最好是成为一个新的答案。 – 2012-02-20 06:26:56