2015-10-20 18 views
8

में संवाद लागू करते समय सामग्री जोड़ने से पहले विंडो सुविधा से अनुरोध किया जाना चाहिए मेरे पास एक टुकड़ा है जिसमें मुझे एक कस्टम संवाद दिखाने की आवश्यकता है।खंड सुविधा

कृपया नीचे अपना कोड देखें।

public class MyFragment extends Fragment{ 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.send_layout, container, false); 
    TextView txtView = (TextView) rootView.findViewById(R.id.tv); 

    txtView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      openDialog(); 
     } 
    }); 
    return rootView; 
    } 
    public void openDialog(){ 
     AppCompatDialog dialog = new AppCompatDialog(getContext(), R.style.package_types__dialog); 
     dialog.setContentView(R.layout.package_types_dialog); 
     dialog.show(); 
    } 
} 

जब लाइन को हटाने:

dialog.setContentView(R.layout.package_types_dialog); 

कोई त्रुटि है, लेकिन अगर मैं का उपयोग एक ही निम्न त्रुटि फेंक है:

FATAL EXCEPTION: main 
10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: Process: in.edelworks.pickedup, PID: 23866 
10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime: android.util.AndroidRuntimeException: Window feature must be requested before adding content 
10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime:  at android.support.v7.app.AppCompatDelegateImplV7.throwFeatureRequestIfSubDecorInstalled(AppCompatDelegateImplV7.java:1584) 
10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime:  at android.support.v7.app.AppCompatDelegateImplV7.requestWindowFeature(AppCompatDelegateImplV7.java:509) 
10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime:  at android.support.v7.app.AppCompatDelegateImplBase.onCreate(AppCompatDelegateImplBase.java:117) 
10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime:  at android.support.v7.app.AppCompatDelegateImplV7.onCreate(AppCompatDelegateImplV7.java:148) 
10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime:  at android.support.v7.app.AppCompatDialog.onCreate(AppCompatDialog.java:60) 
10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime:  at android.app.Dialog.dispatchOnCreate(Dialog.java:361) 
10-20 19:42:57.489 23866-23866/in.edelworks.pickedup E/AndroidRuntime:  at android.app.Dialog.show(Dialog.java:262) 
+0

v22.1.0 करने के लिए अपने AppCompat संस्करण में onStart –

+0

अद्यतन onClick श्रोता सेट करने का प्रयास – MKJParekh

उत्तर

-2

मुझे माफ कर दो अगर मैं नहीं कर रहा हूँ सीधे अपने प्रश्न का उत्तर दें लेकिन मैं एक वैकल्पिक समाधान की सिफारिश करूंगा।

मैंने सीधे AppCompatDialog का उपयोग नहीं किया है, लेकिन मैंने AppCompatTheme के साथ AlertDialog का उपयोग किया है। मुझे AlertDialog इसका उपयोग करने के मामले में बहुत सरल लगता है।

उत्तर here अलर्टडिअलॉग का उपयोग करने का एक अच्छा उदाहरण देता है।

उम्मीद है कि यह मदद करता है।

0

ऑनक्रेट डायलॉग पर ओवरराइड करें और इसके बजाय v7 अलर्टडिअलॉग बिल्डर का उपयोग करें। या

AlertDialog.Builder bulder = new AlertDialog.Builder(this); 
bulder 
.setCancelable(false) 
.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface dialog, int id) { 

} 
}) 
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
     dialog.cancel(); 
    } 
}); 
bulder.setTitle("Title"); 
bulder.setView(getLayoutInflater().inflate(R.layout.dialog, null)); 
AlertDialog dialog = bulder.create(); 
dialog.show(); 
0

बग कि पुस्तकालय संस्करण 23.0.0 पर दिखाई देता है यही कारण है, और संस्करण 23.0.1 में एक फिक्स जारी किया गया था। लेकिन कुछ उपयोगकर्ता रिपोर्ट करते हैं कि समस्या अभी भी दिखाई दे रही है।

Source

एक बात है कि आप की कोशिश कर सकते onCreateDialog ओवरराइड और बजाय एक v7 AlertDialog बिल्डर का उपयोग है। अभी के लिए डायलॉग फ्रैगमेंट का उपयोग करें, लेकिन यदि आप v7 बिल्डर और कस्टम सेट व्यू का उपयोग करते हैं तो आपको एक AppCompatDialog मिल जाएगा।

0

आपकी त्रुटि एक बग है, इसे समर्थन लाइब्रेरी 23.0.1 में ठीक किया गया है। आप v7 AlertDialog.BuilderonCreateDialog() साथ की कोशिश कर सकते:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setTitle("Simple Dialog"); 
    builder.setMessage("Some message here"); 

    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     dismiss(); 
    } 
}); 

builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     dismiss(); 
    } 
}); 

    return builder.create(); 
} 
1

मैं कार्यान्वित किया है और स्थिति की अपनी तरह के लिए कई विकल्पों की कोशिश की है, यह वास्तव में ठीक काम कर रहा है, ताकि मैं अपने त्रुटि समीक्षा करने का मौका नहीं मिल सका। लेकिन मैं सुझाव दे सकता हूं कि आप AppCompatDialog को AlertDialog.Builder के साथ प्रतिस्थापित करें जो android.support.v7.app का वर्ग है।

बदलें इस कोड

public void openDialog(){ 
     AppCompatDialog dialog = new AppCompatDialog(getContext(), R.style.package_types__dialog); 
     dialog.setContentView(R.layout.package_types_dialog); 
     dialog.show(); 
    } 

साथ

public void openDialog(){  
     AlertDialog.Builder dialog = new AlertDialog.Builder(getContext(),R.style.package_types__dialog);  
     dialog.setView(R.layout.package_types_dialog); 
    } 

नोट:

और अगर आप किसी भी कक्षा कि dialog घटनाओं संभालती है तोका विस्तार android.support.v4.app.DialogFragment का। और onCreateDialog विधि को ओवरराइड करना न भूलें।पूर्ण श्रेणी इस तरह की कुछ दिखाई देगी

import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 

/** 
* Created by Shreekrishna on 2/29/2016. 
*/ 
public class PackageTypesDialog extends DialogFragment { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     return super.onCreateDialog(savedInstanceState); 
    } 
} 

यह शायद आपकी समस्या का समाधान करेगा!

0

आपको चेतावनी संवाद में कस्टम दृश्य सेट करने के लिए नीचे दिए गए कोड का उपयोग करना होगा। यह कोड मेरी प्रोजेक्ट में काम करता है।

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 
// ...Irrelevant code for customizing the buttons and title 
LayoutInflater inflater = this.getLayoutInflater(); 
View dialogView = inflater.inflate(R.layout.alert_label_editor, null); 
dialogBuilder.setView(dialogView); 

EditText editText = (EditText) dialogView.findViewById(R.id.label_field); 
editText.setText("test label"); 
AlertDialog alertDialog = dialogBuilder.create(); 
alertDialog.show(); 
0

मेरे मामले में, लाइब्रेरी में एपकोम्प v23.1.1 लाइब्रेरी पर निर्भरता थी। ऐप कंपैट लाइब्रेरी के मेरे वर्तमान संस्करण का उपयोग करने के लिए लाइब्रेरी को मजबूर करना समस्या को हल करता है।

निर्भरता पदानुक्रम आप निम्न आदेश का उपयोग कर सकते हैं देखने के लिए:

gradlew -p MODULE_NAME dependencies 

कहाँ MODULE_NAME अपने अनुप्रयोग मॉड्यूल के नाम (आम तौर पर सिर्फ 'ऐप्लिकेशन')

उन्नत करने के लिए बाध्य करने के लिए पुस्तकालय है निर्भरता:

compile('com.example.m:m:1.0') { 
    exclude group: 'com.android.support', module: 'appcompat-v7' 
}