13

पर रीसाइक्लर व्यू (रीसाइक्लर फ्रैगमेंट) जोड़ें, मेरे पास एक कस्टम व्यूअर बनाने के लिए मेरा कस्टम रीसाइक्लर व्यू है। और यह बहुत अच्छा काम करता है, जब मैं अपने लेआउट की आईडी में एक सूची दृश्य को पॉप्युलेट करने की कोशिश कर रहा हूं।एक संवाद

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
Bundle bundle = new Bundle(); 
bundle.putBoolean("enablePullToRefresh", false); 
GridValues gridValues = new GridValues(); 
gridValues.rowViewLayout = R.layout.my_detail_row_view; 

gridValues.delegate = this; 

mygrid = new CustomGridView(gridValues, bundle); 
mygrid.showAsGrid = true; 
mygrid.spanCount = 2; 
mygrid.layoutOrientation = LinearLayoutManager.VERTICAL; 
mygrid.noRowColor = true; 
mygrid.gridName = "mygrid"; 

mygrid.setArguments(mygrid.bundle); 
ft.replace(R.id.MyGridContainer, mygrid); 

अब, मैं एक संवाद के अंदर एक नई सूची को भरने के लिए करना चाहते हैं। मैं यह कैसे कर सकता हूं?

मैं इस कोशिश की, स्थिर के रूप में

public static class MyDialogFragment extends DialogFragment { 
    static MyDialogFragment newInstance() { 
     return new MyDialogFragment(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return mygrid.getView(); 
    } 
} 

और फिर, mygrid होने

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
DialogFragment newFragment = MyDialogFragment.newInstance(); 
ft.add(R.id.MyGridContainer, newFragment); 
//getView().findViewById(R.id.MyGridContainer).setVisibility(View.VISIBLE); 
ft.commit(); 
+1

बस यही तर्क आप * सामान्य * 'Fragment' – Blackbelt

+0

क्यों आप का उपयोग नहीं करते AlertDialog.Builder विधि के लिए आवेदन लागू करने के लिए है? वहां आप addView() –

+0

@ ब्लैकबल्ट को कॉल कर सकते हैं, मैंने कोशिश की है कि फ्रैगमेंट ट्रांज़ेक्शन का उपयोग करके दुर्भाग्यवश यह काम नहीं करता है। मैं मूल अवधारणाओं से ज्यादा अवगत नहीं हूं, और मैं अभी भी एक शिक्षार्थी हूं। –

उत्तर

28

DialogFragment सिर्फ एक और टुकड़ा है, अपने कस्टम दृश्य फुलाना की तरह आप किसी भी अन्य टुकड़ा के लिए करना होगा। जैसा कि आप सामान्य टुकड़ा में क्या

public class MyDialogFragment extends DialogFragment { 
    private RecyclerView mRecyclerView; 
    private MyRecyclerAdapter adapter; 
    // this method create view for your Dialog 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      //inflate layout with recycler view 
     View v = inflater.inflate(R.layout.fragment_dialog, container, false); 
     mRecyclerView = (RecyclerView) v.findViewById(R.id.recycler_view); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     //setadapter 
     CustomAdapter adapter = new MyRecyclerAdapter(context, customList); 
      mRecyclerView.setAdapter(adapter); 
     //get your recycler view and populate it. 
     return v; 
    } 
} 
3

मान लें आप एक स्थिर सामान्य टुकड़ा नामित mygrid है, इसलिए यहाँ अपने DialogFragment की तरह दिखना चाहिए कैसे है :

public class MyDialogFragment extends DialogFragment { 
    static MyDialogFragment newInstance() { 
     return new MyDialogFragment(); 
    } 

    // this method create view for your Dialog 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return mygrid.getView(); 
    } 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Dialog dialog = new Dialog(getActivity()); 
     return dialog; 
    } 
} 

और यहां बताया गया है कि आप कैसे sho uld यह दिखाने:

DialogFragment fragment = MyDialogFragment.newInstance(); 
fragment.show(getSupportFragmentManager(), "some tag"); // please refer to DialogFragment#show() method in documentations. 
3

संवाद टुकड़ा में एक RecyclerView दिखा के रूप में सरल है। लेकिन संवाद टुकड़ा में दिखाने के लिए आप की तरह एक संवाद बनाने की जरूरत:

public class AppDialogs extends DialogFragment { 
private AlertDialog.Builder builder; 

public static AppDialogs newInstance(int dialogNo, String title, String msg) 
{ 
    AppDialogs fragment = new AppDialogs(); 
    Bundle args = new Bundle(); 
    args.putInt("dialogNo",dialogNo); 
    args.putString("title", title); 
    args.putString("msg", msg); 
    fragment.setArguments(args); 

    return fragment; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{ 
    if(android.os.Build.VERSION.SDK_INT<=android.os.Build.VERSION_CODES.KITKAT) { 
     getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.argb(0, 0, 0, 0))); 
    } 
    return null; 
} 


@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    Bundle bundle = getArguments(); 
    int pos = bundle.getInt("dialogNo"); 
    switch (pos) { 
     case 0: 
      return showList(); 


    } 

    return super.onCreateDialog(savedInstanceState); 

} 


private Dialog showList() { 
    builder = new AlertDialog.Builder(getActivity(), R.style.app_dialog_theme); 
    builder.setTitle(title); 


RecyclerView rView; 
    builder.setView(rView); 

     return builder.create(); 
    } 
} 

और इसे अपने टुकड़ा या गतिविधि से कॉल करने के लिए आप किसी भी कंटेनर आईडी इन लाइन की जरूरत है तो बस फोन AppDialogs appDialogs = AppDialogs.newInstance(0, title, msg); appDialogs.setCancelable(false); appDialogs.show(getFragmentManager(), null);

यह करना चाहिए न अपने अगर काम नहीं करते तो कृपया मुझे बताएं।

4

स्वीकृत उत्तर कार्य करता है, लेकिन इसे मानक संवाद की तरह इसे रखने के लिए अतिरिक्त प्रयासों की आवश्यकता होती है।

नीचे एक और संभावित तरीका है, जो आपको सभी संवाद कार्यक्षमता (उदाहरण के लिए शीर्षक, आइकन, सकारात्मक/नकारात्मक/तटस्थ बटन) रखने की अनुमति देगा। विचार onCreateDialog ओवरराइड और प्रयोग AlertDialog.Builder#setView() विधि

public class MyDialogFragment extends DialogFragment { 
    private RecyclerView mRecyclerView; 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     mRecyclerView = new RecyclerView(getContext()); 
     // you can use LayoutInflater.from(getContext()).inflate(...) if you have xml layout 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
     mRecyclerView.setAdapter(/* your adapter */); 

     return new AlertDialog.Builder(getActivity()) 
       .setTitle(/* your title */) 
       .setView(mRecyclerView) 
       .setPositiveButton(android.R.string.ok, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton) { 
           // do something 
          } 
         } 
       ).create(); 
    } 
} 
संबंधित मुद्दे