簡體   English   中英

Java(Android Studio) - 無法使用LocalBroadcastManager.getInstance(this)

[英]Java (Android Studio) - Cant use LocalBroadcastManager.getInstance(this)

Java和Android Studio都相當新,我的大部分代碼都來自教程,因此我可能無法完全理解它,盡管我正在努力確保我對我編碼的內容有一定程度的了解。

因此,我嘗試使用DatePicker片段來選擇日期,然后將文本框設置為所選日期。 為了將選定日期的字符串發送到MainActivity我嘗試使用LocalBroadCastManager,使用教程我在MainActivity中創建了一個廣播接收器,我試圖從我的片段發送廣播但是線路

LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

在我的Fragment類中帶有錯誤的下划線

“錯誤:(51,30)錯誤:類LocalBroadcastManager中的方法getInstance無法應用於給定類型;必需:找到上下文:CalendarDatePickerFragment原因:實際參數CalendarDatePickerFragment無法通過方法調用轉換轉換為Context”

我嘗試用其他一些東西替換“this”,比如“Context”,但是它們都給我錯誤。 這是我的所有代碼減去導入:

主要活動:

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

}

對不起,如果我過於復雜化一個非常簡單的問題,我覺得我可能會在更大范圍內做錯事,所以我認為明確我想要實現的目標會很好。

感謝您提供任何幫助。

錯誤:(51,30)錯誤:類LocalBroadcastManager中的方法getInstance無法應用於給定類型; required:找到的上下文:CalendarDatePickerFragment原因:實際參數CalendarDatePickerFragment無法通過方法調用轉換轉換為Context

對,那是正確的。 Fragment不會從Context繼承,而Activity也會繼承。 這就是為什么你可以在Activity使用它而不是在DialogFragment子類中使用它的原因。 在DialogFragment子類中使用getActivity()

LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM