【问题标题】:Transferring data from the third activity to the first将数据从第三个活动传输到第一个活动
【发布时间】:2019-07-27 06:43:12
【问题描述】:

我想从第一个活动到第二个,然后从第二个到第三个。在第三个活动中我想在EditText中输入名称,然后按下按钮后,转到第一个活动,同时发送在第三个活动中输入的信息。

不幸的是,在第三个活动中按下按钮后,我没有返回到第一个活动,而是返回到第二个活动。第一个活动被杀死了吗?我可以做些什么来确保第一个活动的信息是正确的?这是我的代码:

第一:

public class MainActivity extends AppCompatActivity {

    TextView textViewInformation;
    Button button_GoToSecond;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textViewInformation = findViewById(R.id.textView);
        button_GoToSecond = findViewById(R.id.button);

        button_GoToSecond.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent i = new Intent(MainActivity.this, Second.class);
                startActivity(i);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent i) {

        if((requestCode == 1) &&(resultCode == RESULT_OK)) {

            String name = i.getStringExtra("name");
            textViewInformation.setText(name);
        }
    }
}

第二:

public class Second extends AppCompatActivity {

    Button button_GoToThird;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        button_GoToThird = findViewById(R.id.button2);

        button_GoToThird.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent i = new Intent(Second.this, Third.class);
                startActivity(i);
            }
        });
    }
}

第三:

public class Third extends AppCompatActivity {

    EditText editText_Data;
    Button button_SendData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);

        editText_Data = findViewById(R.id.editText);
        button_SendData = findViewById(R.id.button3);

        button_SendData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                finish();
            }
        });

    }

    public void finish() {

        String name;
        name = editText_Data.getText().toString();

        Intent i = new Intent(Third.this, MainActivity.class);
        i.putExtra("name", name);

        setResult(RESULT_OK, i);
        super.finish();
    }
}

【问题讨论】:

    标签: java android


    【解决方案1】:

    只需删除finish();就是这样

    【讨论】:

      【解决方案2】:

      之所以去第二个活动是因为:

       button_SendData.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
      
                  finish();
              }
          });
      
       public void finish() {
      
          String name;
          name = editText_Data.getText().toString();
      
          Intent i = new Intent(Third.this, MainActivity.class);
          i.putExtra("name", name);
      
          setResult(RESULT_OK, i);
          super.finish(); //This kills the current activity.
      }
      

      你应该这样做:

      public void finish() {
      
              String name;
              name = editText_Data.getText().toString();
      
              Intent i = new Intent(Third.this, MainActivity.class);
               Bundle bundle = new Bundle();
               bundle.putString("name", name);
      
              startActivityForResult(i, RESULT_OK, bundle); 
          }
      
      @Override
          protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent i) {
      
          if((requestCode == 1) &&(resultCode == RESULT_OK)) {
              Bundle bundle = i.getExtras();
              String name = bundle.getString("name");
              textViewInformation.setText(name);
          }
      }
      

      当您调用finish 时,它只会终止当前活动。如果你想回到第一个活动,只需为第一个活动启动一个新活动并将数据传递到Bundle

      如果你想要更多的堆栈概念,可以使用Fragments

      【讨论】:

      • 我按照你的指示做了,不同的是我要回到第一个活动,所以肯定更好。但是……不幸的是,TextView 中没有显示任何信息,就好像没有向第一个活动发送任何信息一样。
      • 已调试应用程序?我会检查以确保您进入onActivityResult()。如果是,请检查您的响应代码以确保预期数据在您的条件语句中正常工作。
      • @UnknownBoy 我更新了我的答案,它不完整。对不起。
      • 我应该在哪里接收数据?它仍然可以是 onActivityResult 方法吗?因为我都是按照你的建议做的,但是我还是觉得没有调用这个方法。除非我试图以不适当的方式接收这些数据。你能告诉我当我收到数据时我应该怎么做吗?因为我尝试了各种方式,但一无所获......
      • 您仍然会在onActivityResult 方法中收到它。我再次更新了我的答案。我添加了onActivityResult 方法。
      猜你喜欢
      • 1970-01-01
      • 2016-04-14
      • 2016-06-17
      • 2017-06-14
      • 2012-12-08
      • 2012-08-30
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      相关资源
      最近更新 更多