जब एक और टुकड़ा अंदर एक टुकड़ा जोड़ने, प्रलेखन कहते हैं आप यह गतिशील (क्या करना चाहिए यानी, बल्कि अपने लेआउट एक्सएमएल में एक <fragment>
टैग हार्डकोड से।
तो यहाँ कैसे गतिशील रूप से यह करने के लिए है। इस मामले में
MyDialogFragment:, मैं MyListFragment
MyDialogFragment
में जोड़ें।जावा
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
public class MyDialogFragment extends DialogFragment {
public static final String TAG = MyDialogFragment.class.getSimpleName();
private static final String ARG_TITLE = "ARG_TITLE";
private EditText mEditText;
public MyDialogFragment() {
// Empty constructor required for DialogFragment
}
public static MyDialogFragment newInstance(String title) {
MyDialogFragment myDialogFragment = new MyDialogFragment();
Bundle args = new Bundle();
args.putString(ARG_TITLE, title);
myDialogFragment.setArguments(args);
return myDialogFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
Bundle args = getArguments();
if (args != null) {
dialog.setTitle(args.getString(ARG_TITLE));
}
return dialog;
}
public void setTitle(String title) {
Dialog dialog = getDialog();
dialog.setTitle(title);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_fragment_selected_products, container, false);
//addInnerFragment();
Button okButton = (Button)view.findViewById(R.id.okButton);
okButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
//dismissAllowingStateLoss();
}
}
);
return view;
}
@Override
public void onStart() {
super.onStart();
//addInnerFragment();
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
addInnerFragment();
}
public void addInnerFragment() {
FragmentManager childFragmentManager = getChildFragmentManager();
FragmentTransaction transaction = childFragmentManager.beginTransaction();
//transaction.add(R.id.fragmentContainer, new MyListFragment());
transaction.add(R.id.fragmentContainer, MyListFragment.newInstance(MyListFragment.MODE_SELL));
//transaction.commit();
transaction.commitAllowingStateLoss();
childFragmentManager.executePendingTransactions();
}
}
(आप देखेंगे के रूप में, यह भी संवाद का शीर्षक सेट करने के लिए कुछ कार्यक्षमता शामिल हैं।)
dialog_fragment_selected_products.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MyDialogFragment"
android:orientation="vertical">
<LinearLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentTop="true"
android:layout_above="@+id/okButton" />
<Button
android:id="@+id/okButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="@string/ok" />
</RelativeLayout>
यह कर का एक और लाभ इस तरह से आप किसी भी तर्क को पारित करने के लिए आंतरिक टुकड़े का एक उदाहरण बना सकते हैं।
MyActivity.java
private void showCurrentItemsDialog() {
MyDialogFragment myDialogFragment = MyDialogFragment.newInstance("cpuk.org");
//myDialogFragment.setRetainInstance(true);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(myDialogFragment, MyDialogFragment.TAG);
transaction.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();
}
स्रोत
2016-06-09 14:52:08
मैं भी इसी तरह की समस्या है:
पूर्णता के लिए, यहाँ कोड है कि मैं अपने गतिविधि में उपयोग DialogFragment को दिखाने के लिए है। और मुझे आश्चर्य है कि मुझे कहीं भी जवाब नहीं मिल रहा है। मुझे लगता है कि यह एक आम काम है, उदा। जब आप पोर्ट्रेट में फ्रैगमेंट के साथ पूर्ण स्क्रीन गतिविधि प्रदर्शित करना चाहते हैं, और वही टुकड़ा परिदृश्य में संवाद के रूप में प्रदर्शित करना चाहते हैं। –
मैंने फ़्रेम-लेआउट में मुख्य-टुकड़े को ओवरलेइंग करने वाले मौजूदा सूचीफ्रेम को मरने का प्रदर्शन समाप्त कर दिया। मैं अपनी राय में काफी अच्छा लग रहा हूं, इस तरह थोड़ा: http://1.bp.blogspot.com/-f_1A98GQ1fU/T0bzdWnYIOI/AAAAAAAAUmA/MuRnT7-YU28/s1600/export_06.png – knaecke
शायद यह उदाहरण: http: // stackoverflow.com/questions/12516626/listfragment-as-dialogfragment/16430898#16430898 – Hpsaturn