2012-02-20 1 views
3

一部のテキストビューと水平リストビューを含むカスタムリストビューを使用しています。2つのベースアダプターでOnClickが起動しない

カスタムリストビューのすべての表示正しく挿入すると、OnClickリスナーが正しく機能します。

ここでは、イメージを含む水平リストビューを作成するための2番目のベースアダプタを使用しています。

横リスト表示に移りました横リスト表示内で相対レイアウトをクリックしようとしましたが、発砲していません。

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

最後に、リストビュー内に水平イメージを追加する方法を変更しました。

私は新しいアダプタを作成し、それを膨張させる前に、ダイナミックテーブルのレイアウトを作成し、それに画像を追加しました。私は変更

場所:

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

+0

セットinageviewのクリッカブルに動作していないし、相対レイアウト内のフォーカス可能なプロパティをfalseに設定します。 – jeet

0

この状況は親レイアウトです(水平リストビュー)は、子ビュー(相対レイアウト)に進むべきクリックイベントを受け取ります。あなたのHorizo​​ntalListViewがAbsListViewから拡張されているかどうかはわかりませんが、このコードを試すことができますlistView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

+0

他のソリューションはありませんか? – Venky

-1

あなたのinbox_horizo​​ntal_row XMLの内容を投稿できますか? RelativeLayout XMLにこの行を追加しようとすることができますandroid:descendantFocusability="blocksDescendants"またはandroid:descendantFocusability="beforeDescendants"

+0

の代わりに、[最初の回答](http://stackoverflow.com/a/9356848/593709)を編集する必要があります。 –

+0

@AdilSoomro私の問題を確認してください。 – Venky

+0

ありがとう。私は私の答えを編集することを考えましたが、私はこの答えは本当に前の答えに関連していないと思ったので、新しい答えであることが良いです。 –