2012-08-27 100 views
1

我正在寫一個應用程序,它管理日曆應用程序中的鬧鐘和事件。當我嘗試獲取有關在自定義對話框中報告的事件的所有信息時,我遇到了一個問題。我嘗試了很多東西。我在互聯網上看到的最後一件事使用意圖。然而,儘管Dialog可以發送信息,但我不知道如何接收它。我嘗試用廣播recevier的東西,但它沒有工作......從CustomDialog傳遞信息到主活動

- >下面是對話的代碼:

public class AddingEventMenu extends Dialog implements OnClickListener { 

Event event = new Event(); 
private Button b; 
Context context; 

public AddingEventMenu(Context context) { 
    super(context); 
    this.context = context; 
    this.setContentView(R.layout.addbuttonlayout); 
    this.setTitle("Adding Event"); 
    this.setCancelable(true); 

    this.b = (Button) findViewById(R.id.addEventButton); 
    this.b.setOnClickListener(this); 

} 

public void onClick(View v) { 
    String color; 
    DatePicker DP = (DatePicker) findViewById(R.id.datePicker); 
    TimePicker TP = (TimePicker) findViewById(R.id.timePicker); 
    EditText ET = (EditText) findViewById(R.id.eventText); 
    Spinner SC = (Spinner) findViewById(R.id.colorSelector); 
    Intent intent = new Intent(); 
    intent.setAction("New Event"); 


    color = SC.getSelectedItem().toString(); 

    if (color == "Red") event.eventColor = Color.RED; 
    if (color == "Green") event.eventColor = Color.GREEN; 
    if (color == "Blue") event.eventColor = Color.BLUE; 
    if (color == "Magenta") event.eventColor = Color.MAGENTA; 

    intent.putExtra("Text", ET.getText().toString()); 
    intent.putExtra("Day", DP.getDayOfMonth()); 
    intent.putExtra("Month", DP.getMonth()); 
    intent.putExtra("Year", DP.getYear()); 
    intent.putExtra("Hour", TP.getCurrentHour() * 100 + TP.getCurrentMinute()); 
    intent.putExtra("Color", color); 

    context.sendBroadcast(intent); 

    Log.d("State", "Es un primer paso"); 

    this.dismiss(); 


} 

- >這裏的主菜單代碼:

public class Timetable extends Activity { 
public static List<Event> eventList; 
EventManager eventManager; 
LinearLayout eventListLayout; 
ImageView addButton; 
EventDatabaseManager db; 
BroadcastReceiver BR; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

    setContentView(R.layout.layout_timetable); 

    BR = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction() == "New event"){ 
       Bundle extras = new Bundle(); 
       Event event = new Event(); 
       extras = intent.getExtras(); 
       event.eventText = extras.getString("Text"); 
       event.eventDay = extras.getInt("Day"); 
       event.eventMonth = extras.getInt("Month"); 
       event.eventYear = extras.getInt("Year"); 
       event.eventHour = extras.getInt("Hour"); 
       event.eventColor = extras.getInt("Color"); 

       Log.d("State", "Esta funcionando"); 

       saveNewEvent(event); 
      } 
     } 
    }; 

    db = new EventDatabaseManager(this); 

    eventListLayout = (LinearLayout) findViewById(R.id.eventListLayout); 

    eventManager = new EventManager(this); 
    eventList = eventManager.getEvents(); 



} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.layout_timetable, menu); 
    return true; 
} 

public void onAddButton(View button) { 
    AddingEventMenu aEM = new AddingEventMenu(this); 

    aEM.show(); 

} 

public void saveNewEvent(Event event) { 
    eventList.add(event); 
    db.addEvent(event); 

} 

在主要活動中,我定義了broadcastreceiver,但我認爲這是錯誤的,因爲它沒有任何東西。

我希望有人能幫助我。謝謝你的時間。

回答

0

爲了與未來兼容,您應該考慮使用DialogFragment而不是 Dialog

使用時您可以添加自定義監聽器DialogFragment類像這樣的DialogFragment:

public interface EventAddedListener { 
    public void onEventAdded(Event event); 
} 

,然後將其添加到您的DialogFragment

選擇一個事件後,請致電listener.onEventAdded(event);並在Activity內處理結果。

但是,即使使用DialogFragment,您也可以使用sinisha提供的更復雜的IntentFilter解決方案。

+0

哦,很好的解決方案!我將從DialogFragment中調查更多。謝謝 :) – Bardo91

1

EHave您註冊了您的廣播接收器。你可以這樣做:

IntentFilter filter = new IntentFilter(); 
filter.addAction("New Event"); 
registerReceiver(BR, observerFilter); 

你應該把這段代碼放在你的onCreate方法中。不要忘了註銷接收器使用

unregisterReceiver(BR); 

中的onDestroy方法

,你也使用

intent.setAction("New Event"); 

在你的onClick方法,但在你的onReceive方法使用

if(intent.getAction() == "New event") 

更改爲 if(intent.getAction() == "New Event")

+0

嗨,我試試你說的話(這段代碼是用於放置broadcastReceiver的主Acticity,不是?),但它仍然沒有任何操作(我認爲)我把2個Log.d放在代碼中,一個放在函數將意圖和其他內容發送到BroadcastReceiver的onReceive方法中,但在LogCat中只出現第一個。 – Bardo91

+0

我編輯了我的答案 – sinisha

+0

非常感謝,再次感謝!問題已經解決了!所以,我不會忘記再次註冊廣播公司,看到行動是正確的寫作哈哈哈 – Bardo91