2016-04-07 9 views
1

私はViewPagerでアクティビティを持っています。viewPagerの各フラグメントはDailogFragmentを開きます。オブジェクトを挿入できます。AcceptボタンをクリックするとDialogFragmnentが閉じ、親フラグメントが情報を追加する必要があります。レイアウトへ。私はフラグメントと通信するためにインターフェイスを使用しますが、フラグメントのレイアウトを更新することはできません。私は良い結果が得られないいくつかのソリューションを試しました。dialogframentのフラグメントを更新できません

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(); 


    } 
} 

とDialogFragmentProduct: のコードは、以下のリストであるあなたが本当に 簡単な方法Log.d(「私のデバッグ親フラグメントでダイアログからデータを取得するかどうかをチェックする必要があり、すべての

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

'Fragment'とあなたの' DialogFragment'のコードを投稿してください。 –

+0

申し訳ありませんが、私はコードを入れて、私はlistprodもonDimissまたはonFinishEditDialogを更新するためにアクセスすることができません – Shadowalker

答えて

0

ファースト」、...)

フラグメント

から

コールダイアログの下に、この例を見ない場合その後

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

GETコールバックとデータの後、ダイアログの断片を閉じ

@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"); 
    } 
ダイアログフラグメントで

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); 
        } 
       }); 

あなたはViewPagerは、開始時にすべてのフラグメントを作成することを覚えておいてください、あなたは断片要素をリフレッシュする必要があります手動で

+0

私は試しましたが、私はalthougthテキストを取得する、私はメッセージでトーストを起動することはできません – Shadowalker

+0

@shadowalkerは、トースト? – ThiyagaB

+0

はい、getContextを認識せず、例外がスローされます。 – Shadowalker

0

親フラグメントとDialogFragmentでonDismissを使用しようとしました。それは間違いです、あなたは矛盾しています、それは余りにもあります

関連する問題