有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java(Android Studio)无法使用LocalBroadcastManager。getInstance(这个)

对于Java和Android Studio来说都是新手,我的大部分代码都来自教程,因此我可能无法完全理解它,尽管我正在努力确保我对自己编写的代码有一定程度的理解

所以我试图使用一个日期选择器片段来选择一个日期,然后将一个文本框设置为所选的日期。为了将选定日期的字符串发送到MainActivity,我尝试使用LocalBroadCastManager,使用教程,我在MainActivity中创建了一个广播接收器,并尝试从我的片段发送广播

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

在我的Fragment类中,有一个带下划线的错误

错误:(51,30)错误:LocalBroadcastManager类中的getInstance方法无法应用于给定类型; 必需:上下文 找到:CalendarDatePickerFragment 原因:无法通过方法调用转换将实际参数CalendarDatePickerFragment转换为上下文“

我试着用其他一些东西来替换“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);
}

}

抱歉,如果我把一个非常简单的问题复杂化了,我觉得我可能在更大范围内做错了什么,所以我认为最好能把我想做的事情说清楚

感谢您提供的一切帮助


共 (1) 个答案

  1. # 1 楼答案

    Error:(51, 30) error: method getInstance in class LocalBroadcastManager cannot be applied to given types; required: Context found: CalendarDatePickerFragment reason: actual argument CalendarDatePickerFragment cannot be converted to Context by method invocation conversion

    是的,没错Fragment不从Context继承,而Activity继承。这就是为什么可以在Activity子类中使用它,而不能在DialogFragment子类中使用它的原因。在DialogFragment子类中使用getActivity()

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