Как реализовать диалог для разных видов деятельности? - PullRequest
2 голосов
/ 24 сентября 2011

Я хочу показать один и тот же диалог в разных действиях. Я пытался сделать BaseActivitiy. Деятельность расширяет мою базовую активность. Это работало до сих пор, но теперь я хочу обновить Activity, которая показывает диалог, когда диалог закрыт. В моем случае обновление означает заполнение списка с данными из базы данных SQLite.

Я также попытался получить имя класса, чтобы использовать метод обновления этих действий. Но из-за нестатических методов SQL невозможно изменить метод обновления на статический ...

Есть идеи?

Активность:

    public class MyActivity extends Dialogs {
        ...
        @Override  
        public boolean onContextItemSelected(MenuItem item) { 
            AdapterContextMenuInfo info = (AdapterContextMenuInfo)  item.getMenuInfo();
            int idx = info.position;
            switch (item.getItemId()) {

                case CONTEXTMENU_ID:
                   showMyDialog(this,DIALOG_ID);
                   break;
            }      
        return true;
       }

       public void update() {
           ...
       }
    }

DialogsClass

    public class Dialogs extends Activity {
         @Override
         protected Dialog onCreateDialog(int id) {
              ...
         }
         ...
         //Called on Dialog-Butten press
         private void ReloadActivity(){
             if(DialogCalledByClass.contains("MyActivity")) {
                 MyActivity.update();// It doesn't worke because non-static....
              }
              else if(DialogCalledByClass.contains("MyActivity2")) {

              }
         }

         public void showMyDialog(Context ctx,int id) {
             showDialog(id);
             DialogCalledByClass =ctx.getClass().toString();
         }
     }

Это то, что я пытался ...

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Я нашел решение. Спасибо тебе, Дэвид! Извините, я не смог проголосовать, потому что из-за меньшей репутации ...

private void ReloadActivity(){
    if(DialogCalledByClass.contains("MyActivity")){
        try {
            Method m = DialogActivity.getClass().getMethod("Update");
            try {
                m.invoke(DialogActivity);
            } catch (IllegalArgumentException e) {

                e.printStackTrace();
            } catch (IllegalAccessException e) {

                e.printStackTrace();
            } catch (InvocationTargetException e) {

                e.printStackTrace();
            }


        } catch (SecurityException e) {

            error.d(TAG, "SecurityException"+ e);
            e.printStackTrace();
        } catch (NoSuchMethodException e) {

            Log.d(TAG, "NoSuchMethodException"+ e);
        }

    }
    else if(DialogCalledByClass.contains("MyActivity2")){

    }
}




public void showMyDialog(Activity act,int id){
    showDialog(id);

    DialogCalledByClass = act.getClass().toString();
    DialogActivity = act;

}
1 голос
/ 24 сентября 2011

Например ... Вместо создания BaseActivity вы можете создать свой собственный диалог:

class myDialog extends AlertDialog {
   Activity myActivity;

   public myDialog(Activity myAct){
      myActivity=myAct;
   }

   @Override
   public void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.my_dialog);
      ...
      ...
   }

   @Override
   public void dismiss(){
      myActivity.update();
   }


   @Override
   public void cancel(){
      myActivity.update();
   }

}

Не знаю, понял ли я ваш вопрос, но это идея. Я надеюсь, что это поможет вам.

...