Явно новичок как в Java, так и в Android Studio, большая часть моего кода взята из учебников и, как таковая, я, возможно, не полностью ее понимаю, хотя я стараюсь У меня есть некоторый уровень понимания того, что я кодирую.Java (Android Studio) - Невозможно использовать LocalBroadcastManager.getInstance (this)
Поэтому я пытаюсь использовать фрагмент DatePicker, чтобы выбрать дату, а затем установить текстовое поле на выбранную дату. Для того, чтобы отправить строку выбранной даты к MainActivity Я пытаюсь использовать LocalBroadCastManager, используя учебники, я создал приемник вещания в MainActivity, и я пытаюсь отправить трансляцию из моего фрагмента, однако линии
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
в моем фрагменте класс подчеркнут с ошибкой
«ошибка: (51, 30) ошибка: метод деЫпзЬапсе в классе LocalBroadcastManager не может быть применен к данным типам; требуемой: Контекстное найдено: CalendarDatePickerFragment причины: фактический аргумент CalendarDatePickerFragment не может преобразовываться в контекст посредством обращения к вызову метода on "
Я попытался заменить« это »на несколько других вещей, например« Контекст », однако все они дают мне ошибки. Вот все, что мой код минус импорт:
MainActivity:
public class MainActivity extends ActionBarActivity implements
View.OnClickListener {
TextView mainTextView;
Button mainButton;
EditText inputbox;
static String DateInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainTextView = (TextView) findViewById(R.id.main_textview);
mainTextView.setText("Set in Java!");
mainButton = (Button) findViewById(R.id.TimeInpButton);
mainButton.setOnClickListener(this);
inputbox = (EditText) findViewById(R.id.inputBox);
// Register to receive messages. We are registering an observer (mMessageReceiver) to receive Intents with actions named "custom-event-name".
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("set-date"));
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String setdate = intent.getStringExtra("input-date");
Log.d("receiver", "Got message: " + setdate);
inputbox.setText(setdate);
}
};
@Override
protected void onDestroy() {
// Unregister since the activity is about to be closed.
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onDestroy();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public void onClick(View v) {
DialogFragment DatePickerFrag = new CalendarDatePickerFragment();
DatePickerFrag.show(getSupportFragmentManager(), "datePicker");
}
}
CalendarDatePickerFragment:
public class CalendarDatePickerFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int yy = calendar.get(Calendar.YEAR);
int mm = calendar.get(Calendar.MONTH);
int dd = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, yy, mm, dd);
}
public void onDateSet(DatePicker view, int yy, int mm, int dd) {
String compileddate = (dd+" "+mm+" "+yy);
Log.d("sender", "Broadcasting message");
Intent intent = new Intent("set-date");
// You can also include some extra data.
intent.putExtra("input-date", compileddate);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
}
Извините, если я усложненной очень простой вопрос, я чувствовал, что это было возможно, я мог бы делать что-то неправильно в более широких масштабах, поэтому я подумал, что было бы неплохо дать понять, что я пытаюсь добиться.
Благодарим за помощь, которую вы можете предоставить.
Это сработало, спасибо тонну. Я не думаю, что вы могли бы точно объяснить, что делает это «getActivity()»? – Fyrefly
getActivity() возвращает действие, в котором размещен фрагмент. – Blackbelt