2015-07-01 4 views
-2

У меня есть следующий класс:DialogFragment не отображается на кнопку мыши

public class MyAlertDialogFragment extends DialogFragment { 


    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     return new AlertDialog.Builder(getActivity()) 
       // Set Dialog Icon 
       .setIcon(R.drawable.ic_launcher) 
       // Set Dialog Title 
       .setTitle("Alert DialogFragment") 
       // Set Dialog Message 
       .setMessage("Alert DialogFragment Tutorial") 

       // Positive button 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         // Do something else 
        } 
       }) 

       // Negative Button 
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         // Do something else 
        } 
       }).create(); 
    } 
} 

и другой класс, от которого я называю этот класс.

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    private Context _context; 
    private List<?> _listDataHeader; // header titles 
    // child data in format of header title, child title 
    private HashMap<String, List<String>> _listDataChild; 

    public ExpandableListAdapter(Context context, List<?> listDataHeader, 
      HashMap<String, List<String>> listChildData) { 
     this._context = context; 
     this._listDataHeader = listDataHeader; 
     this._listDataChild = listChildData; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosititon) { 
     return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
       .get(childPosititon); 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    @Override 
    public View getChildView(int groupPosition, final int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 
       .... 
    } 

    .... 
     .... 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 


     final Button btn_login = (Button)convertView.findViewById(R.id.btn_login); 

     btn_print.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       new LineupFragment(); 


      } 
     }); 

     return convertView; 
    } 


    public class LineupFragment extends FragmentActivity{ 

     public LineupFragment() { 

       MyAlertDialogFragment alert = new MyAlertDialogFragment(); 
       alert.show(getSupportFragmentManager(), "Alert_Dialog"); 
     } 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 


     } 

    } 
} 

Когда я нажимаю кнопку, тогда он дает силе закрывать ошибку.

FATAL EXCEPTION: main 
Process: com.novum.ideal, PID: 9408 
    java.lang.IllegalStateException: Activity has been destroyed 
    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1387) 
    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:636) 
    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:615) 
    at android.support.v4.app.DialogFragment.show(DialogFragment.java:138) 
    at com.novum.ideal.ExpandableListAdapter$LineupFragment.<init>(ExpandableListAdapter.java:149) 
    at com.novum.ideal.ExpandableListAdapter$1.onClick(ExpandableListAdapter.java:126) 
    at android.view.View.performClick(View.java:4463) 
    at android.view.View$PerformClick.run(View.java:18770) 
    at android.os.Handler.handleCallback(Handler.java:808) 
    at android.os.Handler.dispatchMessage(Handler.java:103) 
    at android.os.Looper.loop(Looper.java:193) 

Я хочу показать только этот диалог из этого класса.

как я могу это решить?

+0

вам не нужна LineupFragment – Eoin

ответ

0

Вы не можете показать его внутри конструктора. Если вы хотите показать диалог при запуске активности, сделайте это внутри метода onCreate. Взгляните на Activity lifecycle.

+0

я добавил на 'oncreate' но все же теперь отображается диалоговое окно. – deepak

+0

См. Ответ @Blackbelt. – MightySeal

3

Вы не можете использовать оператора new в подклассе Activity. Сама операция должна пройти весь жизненный цикл, прежде чем вы сможете использовать ее в качестве действительного Context, для вашего DialogFragment в вашем случае. Предполагая, что вы создаете свой ExpandableListAdapter из подкласса FragmentActivity, вместо того, чтобы хранить ссылку на Context, вы можете ссылаться на FragmentActivity/Activity, который вы используете, и используя этот способ для извлечения экземпляра supportFragmentManger, который вам нужно показать ваш DialogFragment.

Намного лучше было бы, если вы найдете путь к Activity, чтобы произошло событие onClick, оставив перед ним ответственность за отображение DialogFragment.

например

вместо того, чтобы

private Context _context; 
public ExpandableListAdapter(Context context 

вы могли бы

private FragmentActivity mActivity; 
public ExpandableListAdapter(FragmentActivity activity 

и OnClick

@Override 
public void onClick(View v) { 
    if (!mActivity.isFinishing()) { 
     new MyAlertDialogFragment().show(mActivity.getSupportFragmentManager(), "Alert_Dialog"); 
    } 
} 
+0

Не могли бы вы объяснить это на любом примере? я очень смущен в этом. – deepak

+0

какая часть вас путает? – Blackbelt

+0

Как я могу вызвать этот диалог из события onClick. – deepak

Смежные вопросы