Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-尝试从活动2到活动1以及从一个方法到另一个方法获取数据_Java_Android_Android Edittext_Sharedpreferences - Fatal编程技术网

Java Android-尝试从活动2到活动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

首先-我已经检查了不同的教程,但无法完成我的任务:(

我正在从活动1中的onAddEventClicked方法调用活动2,以打开布局并让用户在EditText中键入名称。然后我要关闭活动2,将捕获的名称发送回活动1,并在ArrayList:event.setName(dataFromActivity2)中创建新的事件时使用它设置名称参数

我可以将EditText的数据保存到StringdataFromActivity2,但是我应该如何将它从onAddEventClicked方法传递回onAddEventClicked方法并设置event.setName(dataFromActivity2)

不幸的是,我已经尝试了很多次,但都没有成功。你能给我一些提示/提示吗?我知道解决方案可能很简单,但我还是一个初学者……:(我应该使用SharedReferences而不是startActivityForResult吗

活动1:

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