0

私は、リストビューの形式でリサイクラービューを持つようにしようとしていますし、私は、リストの下に詳細を表示するフラグメントを設定したいAndroid:リサイクラレイアウトアダプタでフラグメントを動的に埋め込むにはどうすればよいですか?

これは

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dp" 
    android:layout_marginTop="2dp" 
    android:id ="@+id/relative_layout_text" 
    > 
    <ImageView 
     android:layout_width="55dp" 
     android:layout_height="55dp" 
     android:id="@+id/image_view_food_image" 
     android:layout_alignParentLeft="true" 
     android:background="@drawable/common_google_signin_btn_icon_dark_normal"/> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/linear_layout_text" 
     android:layout_toRightOf="@+id/image_view_food_image"> 

     <TextView 
      android:id="@+id/text_view_title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textSize="19dp" 
      android:textStyle="bold" 
      android:textColor="@color/colorTitle" 
      android:layout_alignParentTop="true"/> 
     <TextView 
      android:id="@+id/text_view_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
      android:layout_alignParentTop="true" 
      android:layout_marginTop="5dp"/> 
    </LinearLayout> 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/fragments" 
     android:layout_below="@+id/linear_layout_text"></FrameLayout> 

</RelativeLayout> 

とHERESにどのように私のアダプタのレイアウトであります私は私のフラグメントのためのアダプター

public class FirebaseAdapter extends RecyclerView.Adapter<FirebaseAdapter.MyViewHolder> { 

    private int lastPosition = -1; 
    private View views ; 
    private List<Foods> FoodArray = new ArrayList<>(); 
    private Context mContext ; 
    private ArrayList<String> itemsDesc = new ArrayList<>(); 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView title,name; 
    public ImageView foodImage; 
    public RelativeLayout relativeLayout; 
    public FrameLayout frameLayout; 

    public MyViewHolder(View view) { 
     super(view); 

     title = (TextView) view.findViewById(R.id.text_view_title); 
     name = (TextView) view.findViewById(R.id.text_view_name); 
     foodImage = (ImageView) view.findViewById(R.id.image_view_food_image); 
     relativeLayout = (RelativeLayout) view.findViewById(R.id.relative_layout_text); 
     frameLayout = (FrameLayout) view.findViewById(R.id.fragments); 
     views = view; 
    } 
} 

public FirebaseAdapter(Context context,List<Foods> Foods){ 
    this.FoodArray = Foods; 
    this.mContext = context; 
} 


@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.menu_list, parent, false); 
    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(final MyViewHolder holder, int position) { 
    holder.title.setText(FoodArray.get(position).getTitle()); 
    holder.name.setText(FoodArray.get(position).getName()); 



    itemsDesc.add(FoodArray.get(position).getTitle()); 
    itemsDesc.add(FoodArray.get(position).getName()); 
    itemsDesc.add(FoodArray.get(position).getURL()); 

    DownloadImage Downloader = new DownloadImage(holder.foodImage); 

    Downloader.execute(FoodArray.get(position).getURL()); 

    setAnimation(holder.relativeLayout, position); 


    Fragment blankFragment = new BlankFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putStringArrayList("Food",itemsDesc); 
    blankFragment.setArguments(bundle); 
    ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction() 
      .add(holder.frameLayout.getId(),blankFragment,"BlankFragment").addToBackStack(null).commit(); 
} 

//this is to download async 
public class DownloadImage extends AsyncTask<String,Void,Bitmap>{ 
     private ImageView mImageView; 

     public DownloadImage(ImageView imageView){ 
      this.mImageView = imageView; 
     } 

     //this is the code for downloading the image 
     @Override 
     protected Bitmap doInBackground(String ... url){ 
      Bitmap Image = null; 
      try{ 
       InputStream is = new URL(url[0]).openStream(); 
       Image = BitmapFactory.decodeStream(is); 

      }catch(MalformedURLException ex){ 
       ex.printStackTrace(); 
      } 
      catch(IOException ex){ 
       ex.printStackTrace(); 
      } 
      return Image; 
     } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     if (result != null) { 
      mImageView.setImageBitmap(result); 
     } 
    } 
} 

private void setAnimation(View viewToAnimate, int position) 
{ 
    // If the bound view wasn't previously displayed on screen, it's animated 
    if (position > lastPosition) 
    { 
     Animation animation = AnimationUtils.loadAnimation(viewToAnimate.getContext(), android.R.anim.slide_in_left); 
     viewToAnimate.startAnimation(animation); 
     lastPosition = position; 
    } 
} 
@Override 
public int getItemCount(){return FoodArray.size();} 

} 

と相続人のコードで私のフラグメントを開始

public class BlankFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) 
    { 
     View view = inflater.inflate(R.layout.fragment_blank,container,false); 
     TextView title = (TextView)view.findViewById(R.id.text_view_title); 
     TextView description = (TextView)view.findViewById(R.id.text_view_description); 
     ImageView foodImage = (ImageView) view.findViewById(R.id.image_view_big_food_image); 


     ArrayList<String> foods = getArguments().getStringArrayList("Food"); 

     title.setText(foods.get(0)); 
     description.setText(foods.get(1)); 

     DownloadImage Downloader = new DownloadImage(foodImage); 

     Downloader.execute(foods.get(2)); 

     return view; 
    } 

    public class DownloadImage extends AsyncTask<String,Void,Bitmap> { 
     private ImageView mImageView; 

     public DownloadImage(ImageView imageView){ 
      this.mImageView = imageView; 
     } 

     //this is the code for downloading the image 
     @Override 
     protected Bitmap doInBackground(String ... url){ 
      Bitmap Image = null; 
      try{ 
       InputStream is = new URL(url[0]).openStream(); 
       Image = BitmapFactory.decodeStream(is); 

      }catch(MalformedURLException ex){ 
       ex.printStackTrace(); 
      } 
      catch(IOException ex){ 
       ex.printStackTrace(); 
      } 
      return Image; 
     } 

     @Override 
     protected void onPostExecute(Bitmap result) { 
      if (result != null) { 
       mImageView.setImageBitmap(result); 
      } 
     } 
    } 

だから私の現在のコードで、私はこの

Expected results

ようになり、データを期待しています。しかし、私はので、私はそれを作る方法についてはわからないよ、この代わりに

this is what i got

を得ました私は私の期待した結果を得ることができます

お願いしてありがとうございます。

答えて

0

Guysは、私は私の問題を発見し、stackoverflowの中に、この人の質問に記載された答えとしてこれに対する解決策はありませんhere彼はonBindViewでフラグメントを初期化することが可能であることを述べていますが、つもり使用している場合、あなたはそれを行うことができないだけ断片のような特定のIDがフラグメントを使用しないでください。代わりに、各リサイクルアイテム

+0

に1を加算することでスタックします。あなたは大丈夫cricket_007 @ CardView –

+0

のようなルックスを描いた何私はアンドロイドの開発に新しいですし、フラグメントがそれを行うだろう、私ものの – Annonymous177

+0

フラグメントは、リストに表示することができるかもしれませんが、そのよう –

関連する問題