2016-11-22 3 views
0

RecyclerViewの同じリストに画像と動画をロードするにはどうすればいいですか?Facebookの画像に動画を再生するとFacebookのブログスタイルのように再生できます同様にリストのcardViewsのビデオは、この上の任意のチュートリアルは私を助けてください。私は本当に立ち往生しています。RecyclerViewでビデオと画像を一度ロードする

RecyclerViewは、画像と動画の両方で1つにする方法はありますか?以下は

onStart方法そのFirebaseRecyclerAdapterがありますところ、それはリスト

@Override 
    protected void onStart() { 
     super.onStart(); 

     //checkUserExists(); 
     // mAuth.addAuthStateListener(mAuthLitsener); 
try { 
    FirebaseRecyclerAdapter<Posts, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Posts, BlogViewHolder>(Posts.class, 
      R.layout.item_activity, 
      BlogViewHolder.class, 
      mDatabase) { 
     @Override 
     protected void populateViewHolder(BlogViewHolder viewHolder, final Posts model, final int position) { 



      final String key_post = getRef(position).getKey(); 
      viewHolder.setTitle(model.getEventTitle()); 
      viewHolder.setDesc(model.getEventDescription()); 
      viewHolder.setImage(c, model.getEventImage()); 
      viewHolder.setVideo(c,model.getEventImage()); 

      viewHolder.imagePost.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        Toast.makeText(getApplicationContext(),""+key_post,Toast.LENGTH_LONG).show(); 
        Intent singleView = new Intent(MainActivity.this,ViewSingleImage.class); 
        singleView.putExtra("Blog",key_post); 
        singleView.putExtra("EventName",eventname); 
        startActivity(singleView); 
       } 
      }); 

     } 
    }; 

    mRecyclerview.setAdapter(firebaseRecyclerAdapter); 
} 
catch (Exception ex){ 

    System.out.println("Error "+ ex); 
} 
    } 

を起動し、これは私がして、だから、一般的にイメージとURL

public static class BlogViewHolder extends RecyclerView.ViewHolder{ 


     View mView; 
     private ImageView imagePost; 

     public BlogViewHolder(View itemView) { 
      super(itemView); 
      mView=itemView; 
      imagePost =(ImageView)mView.findViewById(R.id.post_image); 
     } 
     public void setTitle(String title){ 

      TextView post_title = (TextView)mView.findViewById(R.id.post_title); 
      post_title.setText(title); 

     } 

     public void setDesc(String desc){ 

      TextView post_desc = (TextView)mView.findViewById(R.id.post_desc); 
      post_desc.setText(desc); 
     } 


     public void setImage(final Context c,final String imageUrl){ 

     // 

      Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).fit().centerInside().placeholder(R.mipmap.add_btn) 
        .networkPolicy(NetworkPolicy.OFFLINE).into(imagePost, new Callback() { 
       @Override 
       public void onSuccess() { 

       } 

       @Override 
       public void onError() { 

        //Reloading an image again ... 
        Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).placeholder(R.mipmap.add_btn) 
          .into(imagePost); 
       } 
      }); 

     } 

     public void setVideo(final Context c, final String videoUrl){ 

     videoLayout = (FullscreenVideoLayout) mView.findViewById(R.id.post_video); 
      // videoLayout.setActivity(this); 
      // videoLayout.setActivity(get); 

      Uri videoUri = Uri.parse(videoUrl); 
      try { 
       videoLayout.setVideoURI(videoUri); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 


     } 


    } 

の両方を宣言しMyViewHolderクラスでありますViewHolderイメージとビデオを宣言したので、OnStartのメソッドでは、ImageUrlとをダウンロードするために私のアダプタを配置したメソッドです、それらをチェックするロジックは、私の側に、まだ注意が必要です

+0

onBindViewHolder()メソッドでビューを作成する前に、以下のリンクを参照し、Viewholderでイメージとテキストビューを使用して条件を確認してください。 http://stackoverflow.com/questions/30978030/playing-video-using-textureview-in-recyclerview –

+0

@Chayan、返信いただきありがとうございます。送信した投稿リンクを見たときに、私が望むのは、その人がリストにロードされた画像を投稿し、その人がRecyclerViewにロードしたビデオを投稿したときに、画像とビデオがロードされたときに自動センスを持たせたい場合です。 )。 –

+0

@huzaifah ---サーバーからイメージURLとビデオURLを取得していますか?サーバーから取得する場合、そのオブジェクトの種類がイメージかビデオかを確認してから、OnCreateViewHolder()メソッドで新しいビューホルダーを作成し、obBindView () 方法。あなたは私にいくつかのPescudoコードを送ろうとするのですか? –

答えて

0
Please do following way:-- 

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<VideoView 
    android:id="@+id/videoView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<ImageView 
    android:id="@+id/imageView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentTop="true" /> 

</RelativeLayout> 

    In Adapterclass:--- 
    public class MyRecyclerViewAdapter extends RecyclerView 
    .Adapter<MyRecyclerViewAdapter 
    .DataObjectHolder> { 
    private static String LOG_TAG = "MyRecyclerViewAdapter"; 
    private ArrayList<DataObject> mDataset; 
    private static MyClickListener myClickListener; 

    public static class DataObjectHolder extends RecyclerView.ViewHolder 
     implements View 
     .OnClickListener { 
    TextView label; 
    TextView dateTime; 

    public DataObjectHolder(View itemView) { 
     super(itemView); 
     label = (TextView) itemView.findViewById(R.id.textView); 
     dateTime = (TextView) itemView.findViewById(R.id.textView2); 
     Log.i(LOG_TAG, "Adding Listener"); 
     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     myClickListener.onItemClick(getPosition(), v); 
    } 
} 

    public void setOnItemClickListener(MyClickListener myClickListener) { 
    this.myClickListener = myClickListener; 
} 

    public MyRecyclerViewAdapter(ArrayList<DataObject> myDataset) { 
    mDataset = myDataset; 
} 

    @Override 
    public DataObjectHolder onCreateViewHolder(ViewGroup parent, 
              int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.recyclerview_item, parent, false); 

    DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
    return dataObjectHolder; 
} 

    @Override 
    public void onBindViewHolder(DataObjectHolder holder, int position) { 
    DataObject dataset=mDataset.get(position) 
    // Check here image or video 
    if(mdataset contains image){ 
     videoview invisible or gone 
    }else{ 
     image invisible or gone 
    ) 

    public void addItem(DataObject dataObj, int index) { 
    mDataset.add(dataObj); 
    notifyItemInserted(index); 
} 

    public void deleteItem(int index) { 
    mDataset.remove(index); 
    notifyItemRemoved(index); 
} 

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

    public interface MyClickListener { 
    public void onItemClick(int position, View v); 
} 

}

+0

あなたの答えに応じてこの投稿に答えることを試みることができますhttp:// stackoverflow。com/questions/40822813/both-images-and-videos-in-a-recyclerview-using-imageview-and-videoviewありがとうございました –

0

あなたがいるかどうかを確認する必要がありますので、私は、あなたがgetEventImage()getEventVideo()を得ているので、あなたは、Firebaseを使用している見ることができますURLは空であるか、またはsetImage()およびsetVideo()のメソッドにあります。このコードを試してみてください。見てください:

public void setImage(final Context c,final String imageUrl){ 

      try { 
       if (imageUrl!=null) { 
        // 

        Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).fit().centerInside().placeholder(R.mipmap.add_btn) 
          .networkPolicy(NetworkPolicy.OFFLINE).into(imagePost, new Callback() { 
         @Override 
         public void onSuccess() { 

         } 

         @Override 
         public void onError() { 

          //Reloading an image again ... 
          Picasso.with(c).load(imageUrl).error(R.mipmap.add_btn).placeholder(R.mipmap.add_btn) 
            .into(imagePost); 
         } 
        }); 





       } else { 

        imagePost.setVisibility(View.GONE); 
       } 
      } 
      catch (Exception e){ 

      } 

     } 

     public void setVideo(final Context c, final String videoUrl){ 
      try { 
       if (videoUrl!=null) { 
        try { 
         Uri videoUri = Uri.parse(videoUrl); 
         try { 
          videoLayout.setVideoURI(videoUri); 
          videoLayout.setTag(videoUrl); 
          String hasVideo_string = (String) videoLayout.getTag(); 
          boolean hasVideo = Boolean.parseBoolean(hasVideo_string); 


         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
        } catch (Exception e) { 
         System.out.println("Error :" + e); 
        } 

       } else { 
        videoLayout.setVisibility(View.GONE); 
       } 
      } 
      catch (Exception e){ 

      } 


     } 

これはうまくいきます。

+0

ありがとう@Lutaaya、その素敵なシンプルなロジック、 –

関連する問題