2014-04-30 19 views
0

当我的应用程序中的菜单项打开datePicker并选择一个日期时,仅当我再次打开选项菜单时,UI中的textview'selectedDateView'才会更新。菜单操作完成后更新活动UI

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 

     DialogFragment newFragment = new SettingsDatePicker(); 
     newFragment.show(getFragmentManager(), "Select the date"); 

     // i think this is called only the second time 
     selectedDateView.setText(String.format("Selected Date: %s", settings.getConfiguredDateTime().toString(fmt))); 

     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

有没有办法来重写OnSettingMenuItemFinished或类似的东西?

感谢您的帮助。

+1

在你的dialogfragment中有一个回调,然后当你选择日期时调用回调。例如:[链接](http://stackoverflow.com/questions/9776088/get-data-back-from-a-fragment-dialog-best-practices) – mario

+0

活动布局中的'selectedDateView'。你可以发布布局吗? – Libin

+0

谢谢@mario 我使用你的建议解决了这个问题:D – BinaryFr3ak

回答

0

解决它使用建议马里奥告诉我的评论。

**EDIT: Add of Source** 

// Activity which calls the datepicker. I KNOW THAT THE CODE CAN BE IMPROVED! Just for trials. 
public class MyActivity extends Activity 
{ 
    /* 
    * Code blabla 
    */ 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 

      DialogFragment newFragment = new SettingsDatePicker(); 
      newFragment.setCallback(this); 
      newFragment.show(getFragmentManager(), "Select the date"); 

      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    public void CallBack(String text) 
    { 
      // i think this is called only the second time 
      selectedDateView.setText(String.format("Selected Date: %s", text)); 
    } 

    /* 
    * Code blabla 
    */ 
} 


// DialogFragment 
public class SettingsDatePicker extends DialogFragment 
{ 

    private MyActivity activity = null; 
    /* 
    * Code blabla 
    */ 
    public void setCallback(MyActivity activity) { 
     //set callback class 
     this.activity = activity; 
    } 

    public void onDateSet(DatePicker view, int year, int month, int day) { 
     // Do something with the date chosen by the user 
     this.activity.CallBack("TextToUpdate"); 
    } 

    /* 
    * Code blabla 
    */ 
} 
+1

如果你发布你用来解决问题的代码,它可能会帮助某个人(像我这样的新手)。 – shanavascet

+0

@shanavascet感谢您的反馈 - 希望它有帮助。 – BinaryFr3ak