1

カレンダーアプリのようにアラームやイベントを管理するアプリを書いています。カスタムダイアログで報告されたイベントに関するすべての情報を取得しようとしたときに、問題が発生しました。私は多くのことを試みました。私がインターネットで見た最後の1つは、インテントを使用しています。ダイアログは情報を送信できますが、受信方法がわかりません。放送受信機で試してみましたが、うまくいきませんでした...

->ダイアログのコードは次のとおりです。

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);

}

メインのアクティビティでブロードキャストレシーバーを定義しましたが、そこには何もないので間違っていると思います。

誰かが私を助けてくれることを願っています。御時間ありがとうございます。

4

2 に答える 2

1

E放送受信機を登録しましたか。あなたはこのようにそれを行うことができます:

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" )

于 2012-08-27T08:03:24.833 に答える
0

将来の互換性を保つために、 Dialogの代わりに DialogFragmentの使用を検討する必要があります。

DialogFragmentを使用する場合、次のDialogFragmentようなカスタムリスナーをクラスに追加できます。

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

次に、それをに追加しますDialogFragment

イベントが選択された後、あなたはlistener.onEventAdded(event);あなたの内で結果を呼び出して処理しますActivity

ただし、を使用している場合でも、sinishaが提供するより複雑なIntentFilterソリューションを使用することもできます。DialogFragment

于 2012-08-27T08:51:42.530 に答える