【问题标题】:Setting view on previous activity on finish在完成时设置上一个活动的视图
【发布时间】:2023-04-08 07:44:01
【问题描述】:

我有两个活动,活动 A 有一个 textview 和一个按钮,通过按下按钮我将转到活动 B。在活动 B 中包含一个 editText 和一个按钮,在编辑 editText 然后单击活动 B 中的按钮然后它将返回到活动 a 并在 TextView 中显示文本。

public class A extends AppCompatActivity{

    ...
    public void setText(String text){
           textView.setText(text);
    }

}

public class B extends AppCompatActivity{

    ...
    Button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        A a = new A();
        a.setText(editText.getText().toString());
        finish();
        }
    });

}

然而,在活动 B 中按下按钮后,我会得到一个空指针异常。我不想将 B 更改为片段。

【问题讨论】:

  • 如何在 B 活动中调用 A a = new A()? A 是一个活动而不是一个类。请使用意图在两个活动之间传输数据。
  • 使用可以使用意图、接口或静态变量。
  • 发布堆栈跟踪

标签: android android-activity nullpointerexception


【解决方案1】:

你想做这样的事情

public class A extends AppCompatActivity{

    public void goToB_activityBringText(){
       Intent i = new Intent(this, B.class);
       startActivityForResult(i, 1);
    }

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

        if (requestCode == 1) {
            if(resultCode == Activity.RESULT_OK){
                String result=data.getStringExtra("result");
                 textView.setText(result);
            }
            if (resultCode == Activity.RESULT_CANCELED) {
                //Write your code if there's no result
            }
        }
    }
}

public class B extends AppCompatActivity{

    ...
    Button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent returnIntent = new Intent(); 
        returnIntent.putExtra("result","This is my text value");
        setResult(Activity.RESULT_OK,returnIntent);
        finish();

        }
    });
}

详细阅读Activity的startActivityForResult方法

【讨论】:

    【解决方案2】:

    如果您有两个活动,您需要从 A 中的 B 活动接收值。您可以使用 startActivityForResult() 并在 B 中发送您需要的值。

    在这里你可以学习如何使用它。

    https://developer.android.com/training/basics/intents/result.html?hl=es

    【讨论】:

      【解决方案3】:

      你不能这样做。使用意图通过活动传递数据。如果您想从一个活动返回到另一个活动并将数据传回,您应该使用结果机制(它也使用意图)。

      检查这个,在这种情况下应该可以帮助你。 https://developer.android.com/training/basics/intents/result.html

      换句话说 您必须使用startActivityForResult 启动活动B,然后在完成它之前设置结果,然后在方法onActivityResult 中处理活动A 中的结果。您还可以阅读有关通过意图传递数据的更多信息。

      【讨论】:

        【解决方案4】:

        使用navigateToB启动ActivityB并使用onActivityResult

        更新清单为:

        <activity
                android:name=".B"
                android:parentActivityName=".A" />
        

        A.java

        public class A extends AppCompatActivity{
        
            public void setText(String text){
                textView.setText(text);
            }
        
            public void navigateToB() {
                Intent i = new Intent(this, B.class);
                startActivityForResult(i, 1);
            }
        
            @Override
            protected void onActivityResult (int requestCode, int resultCode, Intent data) {
        
                if(data != null) {
                    String text = data.getString("TEXT");
                    textView.setText(text);
                }
            }   
        
        }
        

        B.java

        public class B extends AppCompatActivity{
        
            ...
            Button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
        
                    Intent data = new Intent();
                    data.putString("TEXT", editText.getText().toString());
                    setResult(data, RESULT_OK);
                    finish();
                }
            });
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-25
          • 2020-11-10
          相关资源
          最近更新 更多