0

私は自分が作成したビデオギャラリーに移動するボタンがあるページで作業しています。これから、いくつかのビデオ(サムネイル)を選択し、矢印を押して、ボタンを押した場所から戻って、選択したビデオでカスタムギャラリーに来ます。カスタムビデオギャラリーから画像を読み込む

は基本的にマップはこのように書き:(AddFragmentから)

ボタン - > VideoGallery->私が打ったとき

今リサイクルビューの内側に表示されている選択した動画とビデオ - > AddFragmentを選択ボタンを私は私のビデオギャラリーに来るが、私はギャラリーからいくつかのビデオを選択し、AddFragmentに戻ってくると何も表示されず、エラーが1つ表示されますE/RecyclerView:レイアウトをスキップする

ここでは、送信データを抽出してAddFragmentに入力するためにBundleを使用しました。

私はあなたのためのコードを配っています:

1. AddFragment.java

public class AddFragment extends Fragment { 

private ImageButton nextActivity; 
private RecyclerView recyclerView; 
private ProgressDialog videoProgressDialog; 
ArrayList<File> checkedList = new ArrayList<>(); 
ImageAdapter imageAdapter; 
Button button; 

public AddFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_add, container, false); 

    nextActivity = (ImageButton) view.findViewById(R.id.gotoButton); 

    recyclerView = (RecyclerView) view.findViewById(R.id.grid_add_view); 

    button = (Button) view.findViewById(R.id.buttonToGallery); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      startActivity(new Intent(getContext(),VideoGalleryActivity.class)); 
     } 
    }); 

    return view; 
} 

//making adapter for RecyclerView which loads the desired files 
class ImageAdapter extends RecyclerView.Adapter<ViewHolder>{ 

    private LayoutInflater mInflater; 

    private Bitmap bitmap; 

    private ArrayList<File> fileName; 

    public ImageAdapter(ArrayList<File> checkedList) { 

     fileName = checkedList; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     Log.e("ADAPTER SETTING","DOING"); 
     //getting the passed value from videogallery 
     Bundle bundle = new Bundle(); 
     ArrayList<String> getValue = bundle.getStringArrayList("sendData"); 
     Log.e("RECEIVED_DATA======",getValue.toString()); 

     //adding the files to the list 
     for(String pathName : getValue){ 
      File filePath = new File(pathName); 
      checkedList.add(filePath); 
     } 

     //setting the adapter 
     imageAdapter = new ImageAdapter(checkedList); 
     recyclerView.setAdapter(imageAdapter); 
     recyclerView.setVisibility(View.VISIBLE); 

     View items = mInflater.from(parent.getContext()).inflate(R.layout.custom_added_video, 
       parent,false); 
     items.setLayoutParams(new AbsListView.LayoutParams(215,215)); 
     return new ViewHolder(items); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return super.getItemViewType(position); 
    } 

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

     if(fileName != null){ 
      bitmap = ThumbnailUtils.createVideoThumbnail(fileName.get(position).toString(),1); 
      holder.imageView.setImageBitmap(bitmap); 
     } 
    } 

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

class ViewHolder extends RecyclerView.ViewHolder { 
    public ImageView imageView; 
    //public ImageButton imageButton; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     //imageButton = (ImageButton) itemView.findViewById(R.id.addVideos); 
     imageView = (ImageView) itemView.findViewById(R.id.galleryImageView); 
    } 
} } 

2. fragment_add.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="@color/colorWhite" 
tools:context="in.pinelane.myhovi.AddFragment"> 

<!-- TODO: Update blank fragment layout --> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:id="@+id/linearLayout" 
    android:padding="19dp"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="17dp" 
     android:textStyle="bold" 
     android:text="Choose Videos" 
     android:textColor="@color/colorBackground"/> 

    <View 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

    <ImageButton 
     android:id="@+id/gotoButton" 
     android:layout_width="25sp" 
     android:layout_height="25sp" 
     android:background="#00ffffff" 
     android:src="@mipmap/ic_arrow_forward_black_24dp"/> 
</LinearLayout> 

<Button 
    android:id="@+id/buttonToGallery" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Gallery"/> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/grid_add_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" /> 

これを膨張させるすべてのアイデアは、大きな助けになるでしょうレイアウト custom_added_video.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@color/colorWhite" 
android:layout_marginTop="3dp" 
android:layout_marginBottom="3dp" 
android:layout_marginEnd="3dp" 
android:layout_marginStart="3dp"> 

<!--<ImageButton--> 
    <!--android:id="@+id/addVideos"--> 
    <!--android:layout_width="match_parent"--> 
    <!--android:layout_height="wrap_content"--> 
    <!--android:src="@mipmap/ic_add_black_24dp"--> 
    <!--android:layout_margin="3dp"--> 
    <!--android:background="@drawable/edittext_border"--> 
    <!--android:layout_centerInParent="true"/>--> 

<ImageView 
    android:id="@+id/galleryImageView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scaleType="centerCrop" 
    android:layout_margin="3dp" 
    android:layout_centerInParent="true"/> 

!おかげ

は私がのonCreateで以下のコードを定義しようとしましたが、私はそう、私はonCreateViewHolder内で同じことを定義したが、何の結果はちょうどませアダプター取り付けられていない場合NullPointerExceptionを得ました。スキップレイアウト

Log.e("ADAPTER SETTING","DOING"); 
     //getting the passed value from videogallery 
     Bundle bundle = new Bundle(); 
     ArrayList<String> getValue = bundle.getStringArrayList("sendData"); 
     Log.e("RECEIVED_DATA======",getValue.toString()); 

     //adding the files to the list 
     for(String pathName : getValue){ 
      File filePath = new File(pathName); 
      checkedList.add(filePath); 
     } 

     //setting the adapter 
     imageAdapter = new ImageAdapter(checkedList); 
     recyclerView.setAdapter(imageAdapter); 
     recyclerView.setVisibility(View.VISIBLE); 

EDITS

私はこのフラグメントの私のコードとユーザーの内部のいくつかの変更onActivityResultstartActivityForResultをしなかったが、まだ何の結果ました。私AddFragmentはまだ空白で、

編集AddFragment.java

public class AddFragment extends Fragment { 

private ImageButton nextActivity; 
private RecyclerView recyclerView; 
ArrayList<File> checkedList = new ArrayList<>(); 
ImageAdapter imageAdapter; 
Button button; 
private static final int CustomGallerySelectId = 1;//Set Intent Id 

public AddFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_add, container, false); 

    nextActivity = (ImageButton) view.findViewById(R.id.gotoButton); 

    recyclerView = (RecyclerView) view.findViewById(R.id.grid_add_view); 

    button = (Button) view.findViewById(R.id.buttonToGallery); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      startActivityForResult(new Intent(getContext(),VideoGalleryActivity.class),CustomGallerySelectId); 
     } 
    }); 

    //setting the adapter 
    imageAdapter = new ImageAdapter(checkedList); 
    GridLayoutManager videoGrid = new GridLayoutManager(getContext(),3); 
    recyclerView.setLayoutManager(videoGrid); 
    recyclerView.setAdapter(imageAdapter); 
    recyclerView.setVisibility(View.VISIBLE); 

    return view; 
} 

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

    switch(requestCode){ 
     case CustomGallerySelectId : 
      if(requestCode == RESULT_OK){ 
       Log.e("ADAPTER SETTING","DOING"); 
       //getting the passed value from videogallery 
       Bundle bundle = new Bundle(); 
       ArrayList<String> getValue = bundle.getStringArrayList("sendData"); 
       Log.e("RECEIVED_DATA======",getValue.toString()); 

       //adding the files to the list 
       for(String pathName : getValue) { 
        File filePath = new File(pathName); 
        checkedList.add(filePath); 
       } 

      } 
    } 
} 

//making adapter for RecyclerView which loads the desired files 
class ImageAdapter extends RecyclerView.Adapter<ViewHolder>{ 

    private LayoutInflater mInflater; 

    private Bitmap bitmap; 

    private ArrayList<File> fileName; 

    public ImageAdapter(ArrayList<File> checkedList) { 

     fileName = checkedList; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View items = mInflater.from(parent.getContext()).inflate(R.layout.custom_added_video, 
       parent,false); 
     items.setLayoutParams(new AbsListView.LayoutParams(215,215)); 
     return new ViewHolder(items); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return super.getItemViewType(position); 
    } 

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

     if(fileName != null){ 
      bitmap = ThumbnailUtils.createVideoThumbnail(fileName.get(position).toString(),1); 
      holder.imageView.setImageBitmap(bitmap); 
     } 
    } 

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

class ViewHolder extends RecyclerView.ViewHolder { 
    public ImageView imageView; 
    //public ImageButton imageButton; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     //imageButton = (ImageButton) itemView.findViewById(R.id.addVideos); 
     imageView = (ImageView) itemView.findViewById(R.id.galleryImageView); 
    } 
} } 

答えて

0

移動にどんな結果にこのコードが表示されない:

//setting the adapter 
    imageAdapter = new ImageAdapter(checkedList); 
    recyclerView.setAdapter(imageAdapter); 
    recyclerView.setVisibility(View.VISIBLE); 

あなたcreateView()方法。

createViewでレイアウトを膨張させると、RecyclerViewが見つかりましたが、アダプタを設定していません。 RecyclerViewには表示するデータがないため、レイアウトからスキップしてパフォーマンスを向上させています。 LayoutManagerも設定する必要があります。単純なリストが必要な場合は、LinearLayoutManagerを使用してください。

RecyclerViewの可視要素ごとにcreateViewHolder()メソッドが1回呼び出されます。 RecyclerViewの初期設定を行うのは適切な場所ではありません。

+0

このような変更はありましたが、結果はありません://アダプタの設定 imageAdapter = new ImageAdapter(checkedList); GridLayoutManager videoGrid =新しいGridLayoutManager(getContext()、3); recyclerView.setLayoutManager(videoGrid); recyclerView.setAdapter(imageAdapter); recyclerView.setVisibility(View.VISIBLE); –

+0

実際にアダプタにアイテムを追加していますか? –

+0

私は自分のコードでいくつかの変更を加えました。ImageAdapterにはVideoGalleryから来たデータがすべて定義されています。 –