2016-04-07 14 views
1

ViewPager ile bir etkinliğim var, viewPager üzerindeki her Fragman bir nesne ekleyebileceğim bir DailogFragment açabilir, Accept düğmesine bastığımda DialogFragmnent reddeder ve parent Fragment bilgi eklemek zorundadır Düzeni'ne. Fragmanla iletişim kurmak için arayüz kullanıyorum, ancak Fragmandaki Düzen'i güncelleyemiyorum. İyi sonuçlarla bazı çözümler denedim.Diyalog çerçevesindeki parça güncellenemiyor

public class TransferPickingActivityProduct extends Fragment implements DialogFragmentProducts.DFragmentListener, DialogInterface.OnDismissListener { 

    private static final List<PackOperation> packsprod = new ArrayList<>(); 

    private LinearLayout listprod; 

    @Override 
    public void onDismiss(DialogInterface dialogInterface) { 

     packsprod.size(); 

    } 

    public void add(Picking pick, FragmentManager fragment, Long idProd) { 

     DialogFragmentProducts dFragment = DialogFragmentProducts.newInstance("PRODUCTO", pick.getId(), idProd); 
     dFragment.setTargetFragment(TransferPickingActivityProduct.this, 1); 

     dFragment.show(fragment, "PRODUCTO"); 
    } 

    @Override 
    public void onFinishEditDialog(PackOperation packOperation) { 
     //Fragment f = fragment; 
     packOperation.save(); 
     packsprod.add(packOperation); 
     //View v = f.getView(); 


    } 
} 

ve DialogFragmentProduct:

tüm
public class DialogFragmentProducts extends DialogFragment { 

    View view; 

     Picking picking; 

    PackOperation pack, packOp; 
    Holder holder; 
    byte index; 
    private static final int ZBAR_SCANNER_REQUEST = 0; 

    private Fragment fragment; 

    public DialogFragmentProducts(){ 

    } 

    public static DialogFragmentProducts newInstance(String title, Long id, Long idProd) { 
     DialogFragmentProducts frag = new DialogFragmentProducts(); 
     Bundle args = new Bundle(); 
     args.putString("title", title); 
     args.putLong("picking", id); 
     if (idProd!= null) 
      args.putLong("producto", idProd); 
     else 
      args.putLong("producto", -1); 
     frag.setArguments(args); 
     return frag; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     super.onCreateDialog(savedInstanceState); 
     fragment = getTargetFragment(); 
     String title = getArguments().getString("title"); 
     picking = Model.load(Picking.class, getArguments().getLong("picking")); 
     Long test = getArguments().getLong("producto"); 
     if (getArguments().getLong("producto")!=-1) { 
      packOp = ListService.getPackOperationbyProduct(String.valueOf(getArguments().getLong("producto"))).get(0); 

     } 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     view = inflater.inflate(R.layout.dialog_fragment_product, null); 

     Inicialize(); 

     fragment = getTargetFragment(); 
     return new AlertDialog.Builder(getActivity()) 
       .setTitle(title) 
       .setView(view) 
       .setPositiveButton(this.getString(R.string.accept_button), 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
               int whichButton) { 
           try{ 
            pack.setProductQty(Double.parseDouble((String) qty.getText().toString())); 
            pack.setPackage(holder.getPackFuente()); 
            pack.setSync(false); 

            sendBackResult(); 
            ((TransferPickingActivityProduct)getTargetFragment()).onResume(); 
           } 
           catch (Exception e){ 
            Toast.makeText(getContext(), getResources().getString(R.string.data_entry), Toast.LENGTH_LONG).show(); 
           } 

          } 
         }) 
       .setNegativeButton(this.getString(R.string.cancel_button), 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
               int whichButton) { 
           ((TransferPickingActivityProduct)getTargetFragment()) 
             .doNegativeClick(); 
           dismiss(); 
          } 
         }).create(); 

    } 

    public interface DFragmentListener { 
     void onFinishEditDialog(PackOperation packOperation); 
    } 

    public void sendBackResult() { 

     DFragmentListener listener = (DFragmentListener) getTargetFragment(); 

     listener.onFinishEditDialog(pack); 

     dismiss(); 
    } 

    public void launchScanner(View view) { 
     try { 
      if (isCameraAvailable()) { 

       Intent intent = new Intent(DialogFragmentProducts.this.getContext(), ZBarScannerActivity.class); 
       startActivityForResult(intent, ZBAR_SCANNER_REQUEST); 


       (intent.getStringExtra(ZBarConstants.SCAN_RESULT).equals(null)); 
       } else { 
       Toast.makeText(this.getContext(), this.getString(R.string.available_camera), Toast.LENGTH_SHORT).show(); 
      } 
     } catch (Exception e){ 
      Toast.makeText(this.getContext(), this.getString(R.string.read_barcode_error), Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public boolean isCameraAvailable() { 
     PackageManager pm = DialogFragmentProducts.this.getActivity().getPackageManager(); 
     return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      case ZBAR_SCANNER_REQUEST: 

       if (resultCode == getActivity().RESULT_OK) { 

        String ean13 = data.getStringExtra(ZBarConstants.SCAN_RESULT); 
        Fragment f = getTargetFragment(); 
       } 
       break; 
     } 
    } 

    @Override 
    public void onSaveInstanceState(final Bundle outState){ 
     this.setTargetFragment(this, -1); 
    } 

    @Override 
    public void onDismiss(final DialogInterface dialog) { 
     super.onDismiss(dialog); 
     setTargetFragment(getTargetFragment(), 1); 
     Fragment parentFragment = getTargetFragment(); 
     if (parentFragment instanceof DialogInterface.OnDismissListener) { 
      ((DialogInterface.OnDismissListener) parentFragment).onDismiss(dialog); 
     } 
    } 

} 
+1

Lütfen özellikle sizin aramızdaki iletişim de dahil olmak üzere 'Fragment' ve' DialogFragment 'için kod yazınız. –

+0

Üzgünüm, kodu koydum, güncelleme listesine ekleyemedim ya da onDimiss ya da onFinishEditDialog – Shadowalker

cevap

0

Önce gerçekten üst parçası kolay yolu Log.d de iletişim kutusundan veri almak eğer (kontrol etmelisiniz "Benim ayıklama kod aşağıda listesi ", ...)

parçasının

den

Çağrı iletişim aşağıda bu örneğe bakın değilse Bundan sonra iletişim parçası

builder.setView(view).setNegativeButton(R.string.btnDel, 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         Intent intent = new Intent(); 
         intent.putExtra("string", " Hi "); 
         getTargetFragment().onActivityResult(getTargetRequestCode(), 
           Activity.RESULT_CANCELED, intent); 
        } 
       }); 

yılında

DialogFragment fragment = new DialogFragment ; 
    fragment.setArguments(args); 
    fragment.setTargetFragment(this, REQ_FLAG); 
    fragment.show(getFragmentManager(), fragment.getClass().getName()); 

olsun geri arama ve veri sonrasında görevden iletişim parçası

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

     if (resultCode == Activity.RESULT_OK) { 
       ..... 

     } else if (resultCode == Activity.RESULT_CANCELED){ 
       ..... 
      String string = data.getStringExtra("string"); 
    } 

Eğer fragmanları elemanlarını yenilemek gerekir, ViewPager başlangıcında tüm fragmanlar yaratmak hatırlamalıyız el ile

+0

Denedim ama metin alhougth, bir toast atayım. – Shadowalker

+0

@shadowalker kızarmış ekmek? – ThiyagaB

+0

evet, getContext'i tanımıyor ve bir istisna atıyor – Shadowalker

0

Üst kısımda ve DialogFragment öğesinde onDismiss kullanmayı denersiniz. Bir hata var, bir çakışma var, bu aşırı derecede

İlgili konular