Java Android-尝试从活动2到活动1以及从一个方法到另一个方法获取数据
首先-我已经检查了不同的教程,但无法完成我的任务:( 我正在从活动1中的onAddEventClicked方法调用活动2,以打开布局并让用户在EditText中键入名称。然后我要关闭活动2,将捕获的名称发送回活动1,并在ArrayList:event.setName(dataFromActivity2)中创建新的事件时使用它设置名称参数 我可以将EditText的数据保存到StringdataFromActivity2,但是我应该如何将它从onAddEventClicked方法传递回onAddEventClicked方法并设置event.setName(dataFromActivity2) 不幸的是,我已经尝试了很多次,但都没有成功。你能给我一些提示/提示吗?我知道解决方案可能很简单,但我还是一个初学者……:(我应该使用SharedReferences而不是startActivityForResult吗 活动1:Java Android-尝试从活动2到活动1以及从一个方法到另一个方法获取数据,java,android,android-edittext,sharedpreferences,Java,Android,Android Edittext,Sharedpreferences,首先-我已经检查了不同的教程,但无法完成我的任务:( 我正在从活动1中的onAddEventClicked方法调用活动2,以打开布局并让用户在EditText中键入名称。然后我要关闭活动2,将捕获的名称发送回活动1,并在ArrayList:event.setName(dataFromActivity2)中创建新的事件时使用它设置名称参数 我可以将EditText的数据保存到StringdataFromActivity2,但是我应该如何将它从onAddEventClicked方法传递回onAddE
public class BaseActivity extends AppCompatActivity implements WeekView.EventClickListener, MonthLoader.MonthChangeListener, WeekView.EventLongPressListener, WeekView.EmptyViewLongPressListener, WeekView.EmptyViewClickListener, WeekView.AddEventClickListener {
private static final int TYPE_DAY_VIEW = 1;
private static final int TYPE_THREE_DAY_VIEW = 2;
private static final int TYPE_WEEK_VIEW = 3;
private int mWeekViewType = TYPE_THREE_DAY_VIEW;
private static final int REQUEST_CODE = 0;
String TAG = "***";
private WeekView mWeekView;
private ArrayList<WeekViewEvent> mNewEvents;
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
String dataFromActivity2= data.getStringExtra("fav");
}
@Override
public void onAddEventClicked(Calendar startTime, Calendar endTime) {
Intent intent = new Intent(this, Test2.class);
startActivityForResult(intent, REQUEST_CODE);
WeekViewEvent event = new WeekViewEvent();
event.setId(7);
event.setName(fav);
event.setStartTime(startTime);
event.setEndTime(endTime);
event.setColor(getResources().getColor(R.color.event_color_03));
Log.d(TAG, "Intent test:" +fav);
mNewEvents.add(event);
mWeekView.notifyDatasetChanged();
}
...
}
您应该将用于创建事件的代码移动到onActivityResult方法中:
private Calendar startTime, endTime;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
String dataFromActivity2 = data.getStringExtra("fav");
// create event here
WeekViewEvent event = new WeekViewEvent();
event.setId(7);
event.setName(dataFromActivity2);
event.setStartTime(startTime);
event.setEndTime(endTime);
event.setColor(getResources().getColor(R.color.event_color_03));
Log.d(TAG, "Intent test:" + dataFromActivity2);
mNewEvents.add(event);
mWeekView.notifyDatasetChanged();
}
在onAddEventClicked中,您必须将其参数(startTime、endTime)保存到实例变量中,以便能够在onActivityResult中使用它们:
@Override
public void onAddEventClicked(Calendar startTime, Calendar endTime) {
this.startTime = startTime;
this.endTime = endTime;
Intent intent = new Intent(this, Test2.class);
startActivityForResult(intent, REQUEST_CODE);
}
忘了提到,我无法更改:@Override public void onAddEventClicked(Calendar startTime,Calendar endTime)接受另一个字符串参数,因为我正在获取错误“方法不重写其超类中的方法”…有人能帮助新手吗?尝试将添加新事件的部分放入OnActivityResult方法中,而不是onAddEventClicked@cvanbeek-感谢您的回复!我无法移动该部分,因为创建新事件需要覆盖onAddEventClicked。该方法需要两个参数来设置开始和结束时间。任何其他ideas?:)@cvanbeek-thans谢谢你的提示-值得一试!工作完成:)谢谢你的回复:)我刚刚试过,但活动名称仍然是空白的。也许代码顺序有问题?我已经花了3个小时试着让它工作…没有luck@Matt啊,我刚刚注意到代码中还有另一个问题-当您创建尚未设置name变量的事件时,请参见编辑后的答案。它正在工作,但出现了一些奇怪的情况。当我添加第一个事件,比如在EditText中添加“abc”时,名称仍然为空。现在,当我创建第二个事件并键入不同的数据时,该名称最终可见,但会包含第一个事件的名称。。。不,我将尝试找到一种方法,并将事件创建的代码移动到你们推荐的onActivityResult方法中:)我们将了解接下来会发生什么,非常感谢我的朋友为我提供了有效的解决方案-做得好!:)顺便说一句,让我知道你的地址细节,这样我就可以送你一桶啤酒了——波兰的一位高手:)
@Override
public void onAddEventClicked(Calendar startTime, Calendar endTime) {
this.startTime = startTime;
this.endTime = endTime;
Intent intent = new Intent(this, Test2.class);
startActivityForResult(intent, REQUEST_CODE);
}