2012-08-27 49 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