অনুরোধসূচি () অবশ্যই সামগ্রী যুক্ত করার আগে কল করা উচিত


135

আমি একটি কাস্টম শিরোনামবার বাস্তবায়নের চেষ্টা করছি:

এখানে আমার সহায়ক শ্রেণি:

import android.app.Activity;
import android.view.Window;

public class UIHelper {
    public static void setupTitleBar(Activity c) {
        final boolean customTitleSupported = c.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

        c.setContentView(R.layout.main);

        if (customTitleSupported) {
            c.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
        }
    }
}

এখানে আমি এটি অনক্রিট () এ কল করেছি:

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

private void setupUI(){
     setContentView(R.layout.main);
     UIHelper.setupTitleBar(this);
}

তবে আমি ত্রুটি পেয়েছি:

requestFeature() must be called before adding content

এখানে জবাব দেওয়া হয়েছে: স্ট্যাকওভারফ্লো.com
কর্মফল

উত্তর:


331

ঠিক আছে, ত্রুটি বার্তা আপনাকে যা বলে তা ঠিক করুন।

setContentView()আগে কল করবেন না requestFeature()

বিঃদ্রঃ:

মতামত হিসাবে বলা হয়েছে, উভয় ActionBarSherlockএবং AppCompatগ্রন্থাগারের জন্য, requestFeature()আগে কল করা প্রয়োজনsuper.onCreate()


60
জঘন্য, এটি একটি উত্কৃষ্ট উত্তর।
একজন ব্যক্তি

60
অ্যাকশনবারেরলকের জন্য, requestFeature()আগে কল করাও জরুরি super.onCreate()। তথ্যসূত্র: github.com/ জেকওয়ার্টন
সরণ

1
আপনার যদি কোনও শিরোনাম বার ছাড়াই একটি বিন্যাস প্রদর্শন করতে হয় এবং তারপরে শিরোনাম বারের সাথে একটি প্রদর্শন করার প্রয়োজন হয়? আপনাকে requestWindowFeature(Window.FEATURE_NO_TITLE)এটি আড়াল করতে ব্যবহার করতে হবে, তারপরে setContentView()আপনার প্রথম বিন্যাসের জন্য, তারপরে requestWindowFeature(Window.FEATURE_CUSTOM_TITLE)আবার শিরোনাম বারটি প্রদর্শন করতে হবে। setContentView()এটি দ্বিতীয়বারের পরে হবে ।
এমএসবিজি

35
এটি @Caran মতই অ্যাপকম্পটে একই ঘটনা case আপনাকে অবশ্যই আপনার requestFeatureআগে কল করতে হবেsuper.onCreate()
জাইসন ব্রুকস

7
এই উত্তরটি খুব বেশি
উপকারে

23

আমি জানি এটি এক বছরেরও বেশি পুরনো, তবে কল করা requestFeature()কখনই আমার সমস্যার সমাধান করেনি। আসলে আমি একেবারেই ডাকি না।

আমি মনে করি যে ভিউটি ফুলে উঠছে এটি একটি সমস্যা ছিল। আমার সমস্ত অনুসন্ধান সত্ত্বেও, আমি ভিউ স্ফীতকরণের বিভিন্ন পদ্ধতির সাথে ঘুরে না আসা পর্যন্ত আমি কখনই উপযুক্ত সমাধান খুঁজে পাইনি।

সতর্কতা ডায়ালগ.বিল্ডার হ'ল সহজ সমাধান তবে যদি আপনি onPrepareDialog()সেই ভিউটি আপডেট করতে ব্যবহার করেন তবে অনেক কাজ করা দরকার ।

আর একটি বিকল্প হ'ল সংলাপগুলির জন্য অ্যা্যাসিঙ্কটাস্কের উত্তোলন।

আমি ব্যবহার করেছিলাম একটি চূড়ান্ত সমাধান নীচে:

public class CustomDialog extends AlertDialog {

   private View content;

   public CustomDialog(Context context) {
       super(context);

       LayoutInflater li = LayoutInflater.from(context);
       content = li.inflate(R.layout.custom_view, null);

       setUpAdditionalStuff(); // do more view cleanup
       setView(content);           
   }

   private void setUpAdditionalStuff() {
       // ...
   }

   // Call ((CustomDialog) dialog).prepare() in the onPrepareDialog() method  
   public void prepare() {
       setTitle(R.string.custom_title);
       setIcon( getIcon() );
       // ...
   }
}

* কিছু অতিরিক্ত নোট:

  1. শিরোনামটি আড়াল করার উপর নির্ভর করবেন না। শিরোনাম সেট না করা সত্ত্বেও প্রায়শই একটি খালি জায়গা থাকে।
  2. শিরোলেখ পাদলেখ এবং মাঝামাঝি ভিউ দিয়ে নিজের ভিউ তৈরির চেষ্টা করবেন না। উপরে বর্ণিত শিরোনাম, FEATURE_NO_TITLE এর অনুরোধ করা সত্ত্বেও পুরোপুরি গোপন করা যাবে না।
  3. রঙ বৈশিষ্ট্য বা পাঠ্য আকারের সাথে আপনার সামগ্রী ভিউকে ভারী স্টাইল করবেন না। কথোপকথনটি হ্যান্ডেল করতে দিন, অন্য কোনও বুদ্ধিমানের কারণে আপনি গা text় নীল ডায়ালগের উপর কালো পাঠ্য রাখার ঝুঁকি নিয়েছেন কারণ বিক্রেতার রং উল্টে গেছে।

মূলত আমি অ্যানক্রিট () পদ্ধতিতে সেটটাইটেল () এবং সেটআইকন () পোস্ট করেছি, তবে সম্পাদনাটি এটিকে প্রস্তুতি () পদ্ধতিতে সরিয়ে নিয়েছে যা অনপ্রেডডায়ালগ () পদ্ধতির সময় বলা হয়।
কুকস্টার

2
ভাগ করে নেওয়ার জন্য ধন্যবাদ. আমি মনে করি নিম্নলিখিত রেখাটি content = inflater.inflate(R.layout.custom_view, null);সম্ভবত হওয়া উচিত content = li.inflate(R.layout.custom_view, null);। সুতরাং, inflaterদ্বারা প্রতিস্থাপন করতে হবে li
এলিয়নার

14

আমি একটি ডায়ালগফ্র্যাগমেন্ট প্রসারিত করছিলাম এবং উপরের উত্তরটি কার্যকর হয়নি। শিরোনাম সরানোর জন্য আমাকে getDialog () ব্যবহার করতে হয়েছিল:

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

@Jonugwaochalifu কিছুক্ষণ আগে এসেছিল তাই আমি ঠিক মনে করতে পারি না তবে আমি নিশ্চিত যে এটি সেট কনটেন্টভিউ () পদ্ধতির আগে করা দরকার
অবৈধ যুক্তি

1
একই সমস্যার সম্মুখীন যে কোনও ব্যক্তির জন্য: আমি এই কোডটি অন ভিউক্রিয়েটেড () এ যুক্ত করেছি;
7geeky

2

ত্রুটিটি ঠিক কী ঘটছে তা আপনাকে জানায় না? আপনি কল করছেন requestWindowFeatureএবং কল করার setFeatureIntপরে setContentView

যাইহোক, setContentViewদু'বার ফোন দিচ্ছেন কেন ?


2

এসডিকে সংস্করণ 23 এবং তদূর্ধ্বের জন্য, আপনি যদি আপনার ক্রিয়াকলাপ প্রসারিত করতে অ্যাপকম্প্যাটঅ্যাক্টিভিটি ব্যবহার করে থাকেন তবে একই রানটাইম এক্সেপশন নিক্ষেপ করা হবে। আপনার ক্রিয়াকলাপটি সরাসরি ক্রিয়াকলাপ থেকে প্রাপ্ত হলে এটি হবে না।

Https://code.google.com/p/android/issues/detail?id=186440 তে উল্লিখিত গুগলে এটি একটি পরিচিত সমস্যা is

এর জন্য প্রদত্ত চারপাশের কাজটি হ'ল রিকোয়েস্টফিউচার () ব্যবহারের পরিবর্তে সমর্থন-রেকর্ড উইন্ডো ফিচার () পদ্ধতিটি ব্যবহার করা।

এটি আপনার সমস্যার সমাধান করে তবে upvote করুন।


1

পরিবর্তন কম্পাইল SDK সংস্করণ , উদ্দিষ্ট SDK সংস্করণ থেকে বিল্ড সরঞ্জাম সংস্করণ থেকে 24.0.0 মধ্যে build.gradle তোমার দর্শন লগ করা অনুরোধ বৈশিষ্ট্য বিষয়টি মুখোমুখি


0

আমার ক্ষেত্রে আমি দেখিয়েছি DialogFragmentমধ্যে Activity। এই কথোপকথনের খণ্ডে আমি ডায়ালগফ্র্যাগমেন্টের মতো লিখেছিলাম কালো সীমানা সরান :

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setStyle(STYLE_NO_FRAME, 0)
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    super.onCreateDialog(savedInstanceState)

    val dialog = Dialog(context!!, R.style.ErrorDialogTheme)
    val inflater = LayoutInflater.from(context)
    val view = inflater.inflate(R.layout.fragment_error_dialog, null, false)
    dialog.setTitle(null)
    dialog.setCancelable(true)
    dialog.setContentView(view)
    return dialog
}

হয় সরান setStyle(STYLE_NO_FRAME, 0)ইন onCreate()বা শ্যাণ্ডে / অপসারণ onCreateDialog। কারণ ডায়ালগ তৈরির পরে ডায়ালগ সেটিংস পরিবর্তন হয়েছে।


0

ডায়ালগগুলির সাথে আমার এই সমস্যাটি একটি বর্ধিত ডায়ালগফ্র্যাগমেন্টের ভিত্তিতে ছিল যা এপিআই 26 চালাচ্ছে এমন ডিভাইসগুলিতে দুর্দান্ত কাজ করেছে তবে এপিআই 23 এর সাথে ব্যর্থ হয়েছে The উপরের কৌশলগুলি কার্যকর হয়নি তবে আমি অনক্রিটভিউ পদ্ধতিটি মুছে ফেলে সমস্যার সমাধান করেছি (যা আরও বেশি সংখ্যক যোগ করা হয়েছিল ডায়ালগফ্র্যাগমেন্ট থেকে সাম্প্রতিক অ্যান্ড্রয়েড স্টুডিও টেম্পলেট) এবং অনক্রিটডায়ালগটিতে ডায়ালগ তৈরি করা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.