2017-09-18 2 views
2

私はAndroidのチャットアプリケーションで作業していますが、メッセージを表示するためにRecyclerViewを使用しています。android - recyclerviewのOnClickListenerが最初のクリックで動作しない

私はアダプタを書いていますが、レイアウト内の要素(この場合はTextView)がクリックされたときに検出に問題があります。

これは私のアダプタです:

public class ChatRoomThreadAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private class ViewHolder extends RecyclerView.ViewHolder { 
     TextView message, timestamp; 

     private ViewHolder(View view) { 
      super(view); 

      message = (TextView) itemView.findViewById(R.id.message); 
      timestamp = (TextView) itemView.findViewById(R.id.timestamp); 
     } 

    } 

    public ChatRoomThreadAdapter(Context mContext, ArrayList<Message> messageArrayList, String userId) { 
     this.mContext = mContext; 
     this.messageArrayList = messageArrayList; 
     this.userId = userId; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView; 
     itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat, parent, false); 

     return new ViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 

     ((ViewHolder) holder).message.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if (((ViewHolder) holder).timestamp.getVisibility() == View.GONE) { 
        ((ViewHolder) holder).timestamp.setVisibility(View.VISIBLE); 
       } else { 
        ((ViewHolder) holder).timestamp.setVisibility(View.GONE); 
       } 

      } 
     }); 

    } 

    @Override 
    public int getItemCount() { 
     return messageArrayList.size(); 
    } 
} 

現在のonClickは動作しますが、私はのonClickをトリガするためにmessageに二回クリックする必要があります。私はこの問題を解決するために3日間無限のソリューションを探し求めてきましたが、インターネット上のソリューションのどれもこれまでに働いていませんでした。

+0

'onClick'が実際に両方の時間に起こっているかどうかを確認するためにログオンしましたが、ビューの可視性は実際には1回しか動作しません。また、 'timestamp'ビューの元の可視性は何ですか?あなたが見ているものを説明する 'GONE'ではなく' INVISIBLE'であれば。最初のクリックは 'GONE'(何も起こらないように見えます)に設定し、2番目のボタンは' VISIBLE'に設定します。 –

+0

onClickは1回だけ発生します。私はそれを記録した。 – zeeks

答えて

5

focusableInTouchMode & focusableがボタンで無効になっていることを確認してください。最初のクリックはフォーカスを取得し、2回目のクリックはonClickListenerを実行します。

+0

私はfalseに設定して無効にしました。また、私はそれを一切取り除こうとしましたが、引き続きonClickをダブルクリックしてトリガーする必要がありました。 – zeeks

+1

"focusable"属性も無効にしてみてください。私は私のIDEでそれをテストしています。私は前に両方を無効にしなければならないことを知っています。私のテストボタンは、両方とも無効になっているフラグメントの中で動作していました。 –

+0

はい。出来た。ありがとうございますking_abu1918 – zeeks

関連する問題