Dialog suhbatdoshni alohida muloqot menejeridan Mening profilimga bosing

Mening suhbatlarimni saqlab qolgan Dialog sinfim bor. Keling, mening muammom shundaki, mening suhbatni tomoshabinlar ro'yxatini ko'rishni men o'z faoliyatimda qaytarib olishni istayman. Buni interfeysi yozish orqali amalga oshirish mumkinligini bilaman, lekin buni amalga oshirish uchun boshqa OOP usuli bormi?

My Dialog kursi:

public class Dialogs{
 public void testCompletionDialog() {

        final Dialog dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(true);
        dialog.setContentView(R.layout.test_complete_dialog);
        dialog.setTitle("Ratta provet?");



        dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

//I want my activity to know that this view is clicked.
                 dialog.dismiss();


            }
        });

        dialog.findViewById(R.id.lesson_btn_ratta).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //I want my activity to know that this view is clicked.


            }
        });

        dialog.show();


    }
}

Mening profilim:

if (areQueOver) {

                    Dialogs dialogs=new Dialogs(TestActivity.this);
                    dialogs.testCompletionDialog();
                }
0
IMHO siz interfeys dan foydalanishingiz kerak.
qo'shib qo'ydi muallif K Neeraj Lal, manba
Quyidagi javobni qarang
qo'shib qo'ydi muallif Chetan Joshi, manba

8 javoblar

You may use it using EventBus

Dialog sinfidagi onClick ichidagi dialog oynasi ochilganligi haqida xabar yuboriladi. Voqeada qaysi dialogni bosganini aytib turadigan string o'zgaruvchilari bo'lishi mumkin.

Faoliyatingiz ichida ushbu hodisaga obuna bo'ling va uni boshqaring. Qaysi muloqotni bosishganligini bilish uchun String o'zgaruvchining qiymatini tekshirishingiz mumkin.

Dialoglar klassini quyidagi tarzda o'zgartiring:

public class Dialogs{
 public void testCompletionDialog() {

        final Dialog dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(true);
        dialog.setContentView(R.layout.test_complete_dialog);
        dialog.setTitle("Ratta provet?");

        dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 EventBus.getDefault().post("btn_marker");
                 dialog.dismiss();
            }
        });

        dialog.findViewById(R.id.lesson_btn_ratta).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().post("btn_ratta");
            }
        });

        dialog.show();

Faoliyatingiz ichida:

@Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(String action){
        if(action.equals("btn_ratta")){

        } else if(action.equals("btn_marker")) {

        }
    }

ichida onCreate bu qo'shing-

EventBus.getDefault().register(this);

inDestroy ichida bu-

EventBus.getDefault().unregister(this);

Muqobil usul:

Xohlasangiz, InterBeys va EventBusdan tashqari, siz o'z faoliyatingizga umumiy usul qo'shishingiz mumkin,

onDialogClicked(String dialogName){//TODO handle the click as per dialogName} 

va keyin bu usulni Dialogs sinfidagi onClick-dan chaqiring.

2
qo'shib qo'ydi
Eng yoqimli! :)
qo'shib qo'ydi muallif Aishwarya Tiwari, manba
Javobni tahrirladim. Iltimos, tekshiring. Umid qilamanki, hozir yordam.
qo'shib qo'ydi muallif Aishwarya Tiwari, manba
Ha, kichik topshiriq uchun emas, balki ilovani yaratayotgan bo'lsangiz, u juda foydali.
qo'shib qo'ydi muallif Aishwarya Tiwari, manba
Ha, aslida sinflar orasida ko'p muloqotga ega bo'lgan ilovalar uchun juda chiroyli yechim, ammo Chetan javobim aslida bu erda muammoimni hal qiladi, lekin sizning halingiz yangi usulni ko'rsatdi. +1 shukur bilan.
qo'shib qo'ydi muallif Nauman Aslam, manba
Buni yaxshi kutubxona deb hisoblayman, lekin bu kabi kichik ishni bajarish uchun uchinchi tomonni ishlatish kerak. Uchinchi tomondan foydalanish o'rniga bu interfeysdan foydalanishim mumkin. Men bu uchun Androidda biror narsani yoki kamida umumiy java usulini izlayapman.
qo'shib qo'ydi muallif Nauman Aslam, manba

You may use it using EventBus

Dialog sinfidagi onClick ichidagi dialog oynasi ochilganligi haqida xabar yuboriladi. Voqeada qaysi dialogni bosganini aytib turadigan string o'zgaruvchilari bo'lishi mumkin.

Faoliyatingiz ichida ushbu hodisaga obuna bo'ling va uni boshqaring. Qaysi muloqotni bosishganligini bilish uchun String o'zgaruvchining qiymatini tekshirishingiz mumkin.

Dialoglar klassini quyidagi tarzda o'zgartiring:

public class Dialogs{
 public void testCompletionDialog() {

        final Dialog dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(true);
        dialog.setContentView(R.layout.test_complete_dialog);
        dialog.setTitle("Ratta provet?");

        dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 EventBus.getDefault().post("btn_marker");
                 dialog.dismiss();
            }
        });

        dialog.findViewById(R.id.lesson_btn_ratta).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().post("btn_ratta");
            }
        });

        dialog.show();

Faoliyatingiz ichida:

@Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(String action){
        if(action.equals("btn_ratta")){

        } else if(action.equals("btn_marker")) {

        }
    }

ichida onCreate bu qo'shing-

EventBus.getDefault().register(this);

inDestroy ichida bu-

EventBus.getDefault().unregister(this);

Muqobil usul:

Xohlasangiz, InterBeys va EventBusdan tashqari, siz o'z faoliyatingizga umumiy usul qo'shishingiz mumkin,

onDialogClicked(String dialogName){//TODO handle the click as per dialogName} 

va keyin bu usulni Dialogs sinfidagi onClick-dan chaqiring.

2
qo'shib qo'ydi
Eng yoqimli! :)
qo'shib qo'ydi muallif Aishwarya Tiwari, manba
Javobni tahrirladim. Iltimos, tekshiring. Umid qilamanki, hozir yordam.
qo'shib qo'ydi muallif Aishwarya Tiwari, manba
Ha, kichik topshiriq uchun emas, balki ilovani yaratayotgan bo'lsangiz, u juda foydali.
qo'shib qo'ydi muallif Aishwarya Tiwari, manba
Ha, aslida sinflar orasida ko'p muloqotga ega bo'lgan ilovalar uchun juda chiroyli yechim, ammo Chetan javobim aslida bu erda muammoimni hal qiladi, lekin sizning halingiz yangi usulni ko'rsatdi. +1 shukur bilan.
qo'shib qo'ydi muallif Nauman Aslam, manba
Buni yaxshi kutubxona deb hisoblayman, lekin bu kabi kichik ishni bajarish uchun uchinchi tomonni ishlatish kerak. Uchinchi tomondan foydalanish o'rniga bu interfeysdan foydalanishim mumkin. Men bu uchun Androidda biror narsani yoki kamida umumiy java usulini izlayapman.
qo'shib qo'ydi muallif Nauman Aslam, manba

You may use it using EventBus

Dialog sinfidagi onClick ichidagi dialog oynasi ochilganligi haqida xabar yuboriladi. Voqeada qaysi dialogni bosganini aytib turadigan string o'zgaruvchilari bo'lishi mumkin.

Faoliyatingiz ichida ushbu hodisaga obuna bo'ling va uni boshqaring. Qaysi muloqotni bosishganligini bilish uchun String o'zgaruvchining qiymatini tekshirishingiz mumkin.

Dialoglar klassini quyidagi tarzda o'zgartiring:

public class Dialogs{
 public void testCompletionDialog() {

        final Dialog dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(true);
        dialog.setContentView(R.layout.test_complete_dialog);
        dialog.setTitle("Ratta provet?");

        dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 EventBus.getDefault().post("btn_marker");
                 dialog.dismiss();
            }
        });

        dialog.findViewById(R.id.lesson_btn_ratta).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().post("btn_ratta");
            }
        });

        dialog.show();

Faoliyatingiz ichida:

@Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(String action){
        if(action.equals("btn_ratta")){

        } else if(action.equals("btn_marker")) {

        }
    }

ichida onCreate bu qo'shing-

EventBus.getDefault().register(this);

inDestroy ichida bu-

EventBus.getDefault().unregister(this);

Muqobil usul:

Xohlasangiz, InterBeys va EventBusdan tashqari, siz o'z faoliyatingizga umumiy usul qo'shishingiz mumkin,

onDialogClicked(String dialogName){//TODO handle the click as per dialogName} 

va keyin bu usulni Dialogs sinfidagi onClick-dan chaqiring.

2
qo'shib qo'ydi
Eng yoqimli! :)
qo'shib qo'ydi muallif Aishwarya Tiwari, manba
Javobni tahrirladim. Iltimos, tekshiring. Umid qilamanki, hozir yordam.
qo'shib qo'ydi muallif Aishwarya Tiwari, manba
Ha, kichik topshiriq uchun emas, balki ilovani yaratayotgan bo'lsangiz, u juda foydali.
qo'shib qo'ydi muallif Aishwarya Tiwari, manba
Ha, aslida sinflar orasida ko'p muloqotga ega bo'lgan ilovalar uchun juda chiroyli yechim, ammo Chetan javobim aslida bu erda muammoimni hal qiladi, lekin sizning halingiz yangi usulni ko'rsatdi. +1 shukur bilan.
qo'shib qo'ydi muallif Nauman Aslam, manba
Buni yaxshi kutubxona deb hisoblayman, lekin bu kabi kichik ishni bajarish uchun uchinchi tomonni ishlatish kerak. Uchinchi tomondan foydalanish o'rniga bu interfeysdan foydalanishim mumkin. Men bu uchun Androidda biror narsani yoki kamida umumiy java usulini izlayapman.
qo'shib qo'ydi muallif Nauman Aslam, manba

Haqiqiylikning har qanday usulini qidirmoqchi bo'lsangiz, ha, siz faollik kontekstida qo'ng'iroq qilishingiz mumkin:

method1() funksiyasi ostida bo'lsa va Dailogdan qo'ng'iroq qilishni xohlasangiz, u holda qo'ng'iroq qilishingiz mumkin.

 ((MyActivity)((Activity)context)).method1();
1
qo'shib qo'ydi
OK, meni yangilash uchun rahmat. :)
qo'shib qo'ydi muallif Chetan Joshi, manba
Buni qo'shish uchun, siz bu amalni bajarishga hojat yo'q, chunki (MyActivity) allaqachon biz sizni nimalar qilayotganimizni tushunishga yordam beradi va kontekstning o'zi bu erda ishlaydi. Faollikka translatsiya qilishda ortiqcha to'qimalar haqida ogohlantirish berilishi mumkin.
qo'shib qo'ydi muallif Nauman Aslam, manba
Men nimani qidirayotganimni aniq bilaman. uslubni statik qilmasdan chaqirish. Rahmatga rahmat.
qo'shib qo'ydi muallif Nauman Aslam, manba

Xabar yaratish.

public interface OnDialogConfirmClickListener {
    void onDialogConfirmClick(Class parameter//or empty);
}

Ushbu interfeysni sizning faoliyatingizga tatbiq qiling.

public class MainActivity extends Activity implements OnDialogConfirmClickListener {
...
}

Interfeysni parametr sifatida Dialog yoki testCompletionDialog usuliga yuboring.

public void testCompletionDialog(OnDialogConfirmClickListener listener) {
    ...
    dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     listener.onDialogConfirmClick(parameter//or empty);
                     dialog.dismiss();
                }
            });
    ...
    }
0
qo'shib qo'ydi

Xabar yaratish.

public interface OnDialogConfirmClickListener {
    void onDialogConfirmClick(Class parameter//or empty);
}

Ushbu interfeysni sizning faoliyatingizga tatbiq qiling.

public class MainActivity extends Activity implements OnDialogConfirmClickListener {
...
}

Interfeysni parametr sifatida Dialog yoki testCompletionDialog usuliga yuboring.

public void testCompletionDialog(OnDialogConfirmClickListener listener) {
    ...
    dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     listener.onDialogConfirmClick(parameter//or empty);
                     dialog.dismiss();
                }
            });
    ...
    }
0
qo'shib qo'ydi

Xabar yaratish.

public interface OnDialogConfirmClickListener {
    void onDialogConfirmClick(Class parameter//or empty);
}

Ushbu interfeysni sizning faoliyatingizga tatbiq qiling.

public class MainActivity extends Activity implements OnDialogConfirmClickListener {
...
}

Interfeysni parametr sifatida Dialog yoki testCompletionDialog usuliga yuboring.

public void testCompletionDialog(OnDialogConfirmClickListener listener) {
    ...
    dialog.findViewById(R.id.lesson_btn_marker).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     listener.onDialogConfirmClick(parameter//or empty);
                     dialog.dismiss();
                }
            });
    ...
    }
0
qo'shib qo'ydi

bu kabi chaqiriq tugmalari uchun listelardan foydalaning

Simpledialoginterface listner = new Simpledialoginterface() {
    @Override
    public void ok_button() {
        //ok button click
    }

    @Override
    public void cancel_button() {
       //cancel button click
    }
};

Ushbu muloqot oynasidan foydalaning

public static void popupnew(String tittle, String message, String Button, String Cancel,
                            final Activity context, final Simpledialoginterface listner) {

    if (!((Activity) context).isFinishing()) {
        android.app.AlertDialog.Builder alertDialog;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            alertDialog = new android.app.AlertDialog.Builder(context, android.R.style.Theme_Material_Light_Dialog_Alert);
        } else {
            alertDialog = new android.app.AlertDialog.Builder(context);
        }
        alertDialog.setTitle(tittle);
        alertDialog.setMessage(message);
        alertDialog.setPositiveButton(Button,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        listner.ok_button();


                    }
                });
        alertDialog.setNegativeButton(Cancel,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        listner.cancel_button();

                    }
                });
        alertDialog.show();
    }

}

//interface class public interface Simpledialoginterface {

public void ok_button();

public void cancel_button();

}

    popupnew("title","message","OK","Cancel",this,listner);//call dialog
0
qo'shib qo'ydi