2016-05-06 17 views
0

すべてのオブジェクトを含むFragmentA内にGridViewがあります。ユーザーが各オブジェクトをタップすると、これらのオブジェクトはFragmentBのListViewに追加されます。オブジェクトをFragmentのGridViewから別のFragmentのListViewに渡す

フラグメントAとフラグメントBは、どちらも同じアクティビティに並んでいることに注意してください。

FragmentAからFragmentBにオブジェクトを送信するためにBundleを使用しようとしましたが、新しいオブジェクトが追加されたことをFragmentBがどのように知っているか分かりません。

バンドルオブジェクトが(FragmentA下)ProductGridAdapterから送信されFragmentBここFragmentA

によって追加された最新のオブジェクトのためのリストビューを更新する場合、受信機はFragmentBする私のコードである:

ProductGridAdapter.java

public class ProductGridAdapter extends ArrayAdapter<Product> { 

    private List<Product> productList; 
    private Context context; 

    public ProductGridAdapter(Context context, int resource, 
          List<Product> objects) { 
     super(context, resource, objects); 
     this.context = context; 
     this.productList = objects; 
    } 

    @Override 
    public int getCount() { 
     return ((null != productList) ? 
       productList.size() : 0); 
    } 

    @Override 
    public Product getItem(int position) { 
     return ((null != productList) ? 
       productList.get(position) : null); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     LayoutInflater layoutInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if(null == view) { 
      view = layoutInflater.inflate(R.layout.grid_product, null); 
     } 

     final Product product = productList.get(position); 

     if(product != null) { 
      final CardView productGridLayout = (CardView) view.findViewById(R.id.product_gridlayout); 
      final TextView productName = (TextView) view.findViewById(R.id.product_name); 
      final ImageView productIcon = (ImageView) view.findViewById(R.id.product_icon); 

      productName.setText(product.getName()); 
      productIcon.setImageDrawable(product.getDrawable()); 

      productGridLayout.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        FragmentB fragment = new FragmentB(); 
        Bundle bundle = new Bundle(); 
        bundle.putSerializable("product", product); 
        fragment.setArguments(bundle); 
       } 
      }); 
     } 

     return view; 
    } 
} 

FragmentA.java

public class FragmentA extends Fragment { 

    private GridView gridView; 
    private ProductGridAdapter productAdapter; 

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

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

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

     gridView = (GridView) rootView.findViewById(R.id.gridview); 
     productAdapter = new ProductGridAdapter(getActivity(), R.layout.fragment_product_display, getProductList()); 
     gridView.setAdapter(productAdapter); 

     gridView.destroyDrawingCache(); 
     gridView.setVisibility(GridView.INVISIBLE); 
     gridView.setVisibility(GridView.VISIBLE); 

     return rootView; 
    } 
} 

FragmentB.java

public class FragmentB extends Fragment { 

     private ListView listView; 
     private PaymentListAdapter paymentAdapter; 
     private LinearLayout button; 
     private ArrayList<String> arr; 

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

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
     } 

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

      listView = (ListView) rootView.findViewById(android.R.id.list); 
      paymentAdapter = new PaymentListAdapter(getActivity(), R.layout.fragment_payment, getProductList()); 
      // button = (LinearLayout) rootView.findViewById(R.id.payment); 

      listView.setAdapter(paymentAdapter); 

      Bundle bundle = this.getArguments(); 
      Product product = (Product) bundle.getSerializable("product"); 

      return rootView; 
     } 

答えて

1

あなたはいくつかの変更がFragmentAに起こるとき、あなたが主な活動への変更は、その後の主な活動すべきことを通知する必要があり、両方のフラグメントにビューを更新するには、メインの活動にインタフェースクラスに2つの一般的な方法を持つことができますその変化についてFragementBに伝えてください。このようにしてください。これがあなたを助けてくれることを願っています。ハッピーコーディング!

関連する問題