0

У меня есть ListView, который находится в пределах Fragment. ListView имеет ContextMenu для редактирования и удаления записей. Я пытаюсь запустить обычай Dialog с выбором EDIT от ContextMenu, но он не принимает мой код. Я использовал android.support.v4.app.FragmentManager в подобной моде с успехом до этого момента. Данный отзыв Cannot resolve method 'show(android.support.v4.app.FragmentManager, java.lang.String) Оцените пожалуйста любые советы, которые могут быть изменены. Заранее спасибо.Фрагмент ListView ContextMenu с диалогом

Фрагмент:

public static class FragmentS extends Fragment { 

    private ListView saveListView; 
    private List<LiftSave> LiftSaves = new ArrayList<LiftSave>(); 
    private static final int EDIT = 0, DELETE = 1; 

    LiftSave longClickedItemLiftSave; 
    DatabaseHandler dbHandler; 
    ArrayAdapter<LiftSave> saveAdapter; 


    public FragmentS() { 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.listview_s, 
       container, false); 
     saveListView = (ListView) rootView.findViewById(R.id.saveListView); 
     registerForContextMenu(saveListView); 
     DatabaseHandler dbHandler; 
     dbHandler = new DatabaseHandler (getActivity().getApplicationContext()); 
     if (dbHandler.getLiftSavesCount() != 0) 
      LiftSaves.addAll(dbHandler.getAllLiftSaves()); 

     populateList(); 

     saveListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
       longClickedItemLiftSave = (LiftSave) parent.getItemAtPosition(position); 
       return false; 
      } 
     }); 

     return rootView; 
    } 

    private void populateList() { 
     saveAdapter = new SaveListAdapter(); 
     saveListView.setAdapter(saveAdapter); 
    } 


    public class SaveListAdapter extends ArrayAdapter<LiftSave> { 
      public SaveListAdapter() { 
       super(getActivity(), R.layout.listview_item, LiftSaves); 
      } 

      @Override 
      public View getView(int position, View view, ViewGroup parent) { 
       if (view == null) 
        view = getActivity().getLayoutInflater().inflate(R.layout.listview_item, parent, false); 

       LiftSave currentLiftSave = LiftSaves.get(position); 

       TextView liftName = (TextView) view.findViewById(R.id.liftName); 
       liftName.setText(currentLiftSave.getLiftName()); 
       TextView maxValue = (TextView) view.findViewById(R.id.maxValue); 
       maxValue.setText(currentLiftSave.getMaxValue()); 
       TextView weightAndReps = (TextView) view.findViewById(R.id.weightAndReps); 
       weightAndReps.setText(currentLiftSave.getRepsAndWeight()); 
       TextView liftNotes = (TextView) view.findViewById(R.id.liftNotes); 
       liftNotes.setText(currentLiftSave.getLiftNotes()); 
       TextView date = (TextView) view.findViewById(R.id.todayDate); 
       date.setText(currentLiftSave.getTodayDate()); 

       return view; 
      } 

    } 
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, view, menuInfo); 

     menu.setHeaderIcon(R.drawable.pencil_icon); 
     menu.setHeaderTitle("Save Options"); 
     menu.add(Menu.NONE, EDIT, menu.NONE, "Edit Save"); 
     menu.add(Menu.NONE, DELETE, menu.NONE, "Delete Save"); 
    } 

    public boolean onContextItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case EDIT: 
       FragmentManager manager = getFragmentManager(); 
       MyDialog myDialog = new MyDialog(); 

       //problem line 
       myDialog.show(manager, "MyDialog"); 
       //problem line 

       break; 

      case DELETE: 

       dbHandler = new DatabaseHandler(getActivity().getApplicationContext()); 
       dbHandler.deleteLiftSave(longClickedItemLiftSave); 
       saveAdapter.remove(longClickedItemLiftSave); 


       break; 
     } 
       return super. 
       onContextItemSelected(item); 
    } 
} 
+0

Убедитесь, что фрагмент диалога расширен с android.support.v4.app.DialogFragment. – Harry

ответ

0

у вас есть две возможности делать то, что вы хотите:

так что если ваш MyDialog() является фрагмент вы не можете использовать .show() - вместо этого вы должны изменить ваш фрагмент так:

manager.beginTransaction().replace(R.id.container, myDialog).commit(); 

или если ваш MyDialog() является DialogFragment вам следует показать его так:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    MyDialog() myDialog = new MyDialog(); 

    myDialog.show(ft, ""); 
+0

Aleizdein, спасибо за ваш ответ. Это действительно «DialogFragment», «фрагмент», из которого я звоню, настроен так, как вы упомянули вначале. Я мог бы пропустить что-то, но мне пришлось бы называть 'FragmentTransaction ft = getActivity(). GetSupportFragmentManager(). BeginTransaction();' для второго способа, который вы упомянули (правильный трек, который, как мне кажется), работать. Вывод 'MyDialog()' следующей строки, ожидающий вызова метода, и 'myDialog' как символ, который не может быть разрешен. – Austin