সতর্কতা ডায়ালগ.কাস্টম লেআউট এবং সম্পাদনা পাঠ্য সহ বিল্ডার; দর্শন অ্যাক্সেস করতে পারবেন না


105

আমি একটি EditTextঅবজেক্ট দিয়ে একটি সতর্কতা ডায়ালগ তৈরি করার চেষ্টা করছি । আমি EditTextপ্রোগ্রামের প্রাথমিক পাঠ্য সেট করতে হবে । আমার যা আছে তা এখানে।

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// ...Irrelevant code for customizing the buttons and title
AlertDialog alertDialog = dialogBuilder.create();
LayoutInflater inflater = this.getLayoutInflater();
alertDialog.setContentView(inflater.inflate(R.layout.alert_label_editor, null));
EditText editText = (EditText) findViewById(R.id.label_field);
editText.setText("test label");
alertDialog.show();

আমার কী পরিবর্তন করতে হবে যাতে আমার একটি বৈধ EditTextঅবজেক্ট থাকতে পারে?

[সম্পাদনা]

সুতরাং, এটি ব্যবহারকারী370305 এবং অন্যদের দ্বারা চিহ্নিত করা হয়েছিল যে আমার ব্যবহার করা উচিত alertDialog.findViewById(R.id.label_field);

দুর্ভাগ্যক্রমে এখানে আরও একটি সমস্যা আছে। স্পষ্টতই, বিষয়বস্তু দর্শন সেট করার AlertDialogকারণে প্রোগ্রামটি রানটাইমের সময় ক্রাশ হয়। আপনাকে এটি নির্মাতাকে সেট করতে হবে।

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// ...Irrelevant code for customizing the buttons and title
dialogBuilder.setView(inflater.inflate(R.layout.alert_label_editor, null));
AlertDialog alertDialog = dialogBuilder.create();
LayoutInflater inflater = this.getLayoutInflater();
EditText editText = (EditText) alertDialog.findViewById(R.id.label_field);
editText.setText("test label");
alertDialog.show();

দুর্ভাগ্যক্রমে, আপনি যখন এটি করেন, alertDialog.findViewById(R.id.label_field);এখন ফিরবেন null

[/ সম্পাদনা]

উত্তর:


241

editTextalertDialogবিন্যাসের একটি অংশ তাই editTextরেফারেন্স সহ কেবল অ্যাক্সেস করুনalertDialog

EditText editText = (EditText) alertDialog.findViewById(R.id.label_field);

হালনাগাদ:

কারণ কোড লাইনে dialogBuilder.setView(inflater.inflate(R.layout.alert_label_editor, null));

inflaterহয় নাল

নীচের মত আপনার কোড আপডেট করুন, এবং প্রতিটি কোড লাইন বোঝার চেষ্টা করুন

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

আপডেট 2:

আপনি যেমন ইউআই উপাদানগুলি আপডেট করার জন্য ইনফ্লেটার দ্বারা নির্মিত ভিউ অবজেক্টটি ব্যবহার করছেন অন্যথায় আপনি সরাসরি শ্রেণীর setView(int layourResId)পদ্ধতি ব্যবহার করতে পারেন AlertDialog.Builderযা এপিআই 21 এবং এর পরে পাওয়া যায়।


23
ইউ এটি হিসাবে এটি করতে পারেন:dialogBuilder.setView(R.layout.dialog_layout);
সিয়াভা

4
@SiavA এই পদ্ধতি উপলব্ধ শুধুমাত্র ফর্ম এপিআই 21. হয়
Scaraux

আমি ডায়লগটি প্রদর্শনের চেষ্টা করছি এবং এটি রিসাইক্লারভিউতে কাজ করছে না তবে এটি করেছে।
মুনিব মীর্জা

সংজ্ঞায়িত না getLayoutInflater()হলে আপনি ব্যবহার করতে পারেন inflater
ব্যাকস্ল্যাশএন

4
@saigopi আপনি অনক্লিককে ওভাররাইড করার সময় আর্গুমেন্ট থাকবে (ডায়ালগআইনটারফেস ডায়ালগ, ইন্ট আইডি)। এই অনিক্লিক পদ্ধতিতে, কেবল ডায়ালগ.ক্যান্সেল () পাস করুন;
মিনকু

29

এটি ব্যবহার করুন

   AlertDialog.Builder builder = new AlertDialog.Builder(activity);
    // Get the layout inflater
    LayoutInflater inflater = (activity).getLayoutInflater();
    // Inflate and set the layout for the dialog
    // Pass null as the parent view because its going in the
    // dialog layout
    builder.setTitle(title);
    builder.setCancelable(false);
    builder.setIcon(R.drawable.galleryalart);
    builder.setView(inflater.inflate(R.layout.dialogue, null))
    // Add action buttons
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {

                    }
                }
            });
    builder.create();
    builder.show();

হওয়া উচিত builder.create().show();, আপনি builder.show();আরও
বিশদের

9

তুমি লিখতে পারো:

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

Button button = (Button)dialogView.findViewById(R.id.btnName);

   button.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {

         //Commond here......

       }
   });

EditText editText = (EditText)
dialogView.findViewById(R.id.label_field); 

editText.setText("test label"); 

dialogBuilder.create().show();

4

কোটলিনে যদি কেউ এটি চায় তবে:

val dialogBuilder = AlertDialog.Builder(this)
// ...Irrelevant code for customizing the buttons and title
val dialogView = layoutInflater.inflate(R.layout.alert_label_editor, null)
dialogBuilder.setView(dialogView)

val editText =  dialogView.findViewById(R.id.label_field)
editText.setText("test label")
val alertDialog = dialogBuilder.create()
alertDialog.show()

পুনরায় পোস্ট @ user370305 এর উত্তর।




1
/**
 * Shows  confirmation dialog about signing in.
 */
private void startAuthDialog() {
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
    AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.show();

    alertDialog.getWindow().setLayout(800, 1400);
    LayoutInflater inflater = this.getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.auth_dialog, null);
    alertDialog.getWindow().setContentView(dialogView);
    EditText editText = (EditText) dialogView.findViewById(R.id.label_field);
    editText.setText("test label");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.