2016-04-19 2 views
0

私はRecyclerViewにフィードを移入しています。 RecyclerViewの上部には、ギャラリーからのステータスや写真のような投稿用の部分があります。私はRecyclerView.Adapterを拡張Adapterをした状態を投稿する私は、フィードを取り込むRecyclerViewを持っています。リサイクラービューの上部には、フィードが挿入される部分があります。

Screen Shot of the app

。このアダプタでは、私はいくつかのonClickListenerを実行することができます。しかし、私が直面している問題は、ギャラリーからイメージを選ぶことです。 Adapterのボタンをクリックしてギャラリーから画像を選択する方法はありますか?方法以下

は、この目的のために使用することができるが、それは活動に動作しますが、onClickListenerAdapterViewHolder内にあるので、私はアダプタで、この方法が必要になります。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { 

     filePath = data.getData(); 
     try { 
      bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 
      imageView.setImageBitmap(bitmap); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

ヘルプは非常に充当されます。

答えて

1

どちらかあなたのActivityアダプタの参照を保持し、あなたのAdapterに呼び出すメソッドを作成し、または(と私はそれが最高だと思う)pathを含むあなたの活動からイベントをブロードキャストし、あなたのアダプタでそれを聞くことができます。

LocalBroadcastManagerを使用して、pathを追加してイベントを送信することができます(Intent経由)。 Adapterにを追加して受信者を追加するにはonAttachedToRecyclerView、受信者を追加するにはonDetachedFromRecyclerViewを使用して聴いてください。その後

あなただけのそのようなあなたのようなボタンや画像バインドする必要があります。

private Bitmap bitmap; // This variable will store your bitmap data 

@Override 
public void onBindViewHolder(final RecyclerViewAdapter.ViewHolder holder, final int position) 
{ 
    // Do that only if it's the post view 

    holder.uploadButton.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      // TODO start your media selection view here 
     } 
    }); 

    if(bitmap != null) 
    { 
     holder.imageView.setImageBitmap(bitmap); 
    } 
} 

をそして、あなたはBroadcastReceiverからのコールバックを取得するとき、あなたはどうなるのような画像を取得し、データとして保存:

ビットマップをメモリ管理目的で使用するときにクリアすることを忘れないでください。

+0

RecyclerViewはフラグメント内にあり、ボタンクリックリスナーはRecyclerView.AdapterのViewHolderの内側にあります。アダプタでタスクを実行して、イメージを選択し、一度に表示されないものを選択した後にimagViewで表示するにはどうすればいいですか(gallaryからイメージを選択した後に表示されます)。 Adapternameであるアダプタの内部でこれを行う方法RecyclerView.Adapter {...} –

+0

これを行う方法を明確にするために、私の答えにいくつかのロジックを追加しました。また、必要に応じてアダプタを 'notifyItemChanged'メソッドを呼び出して更新することもできます。それはあなたに理にかなっていますか? – Benoit

+0

はい、おそらく私の問題を解決しています。私はあなたの答えのonRecieve部分を理解しています。しかし、あなたはonClickの部分をもう少し明瞭にしてください。どうすればギャラリーから画像を選ぶことができますか?スニペットで私を助けてください。私は確かにあなたの答えをチェックします。 –

関連する問題