TextView 未从其他 activity 更新

TextView not being updated from other activity

我在 Activity 1 中有一个带有默认字符串值 "Select a location" 的 TextView,单击时会打开 Activity 2 并且用户会创建一个字符串。就在 Activity 2 完成并且 returns 到 Activity 1 之前,我希望使用新的字符串值更新 TextView(在 Activity 1 中)。我的问题是 TextView 保留了它的默认值并且没有更新为新值。

我也试过设置 SharedPreferences,但也没用。我目前的做法是在 Activity 2 中扩充 Activity 1 的布局,并使用 TextView 的实例更新文本,如第 street_address_textview.setText(chosenLocationString); 行所示。我已经排除了代码中不相关的部分,chosenLocationString 具有正确的值。

Activity 1:

    TextView streetAddress_textview;

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

        streetAddress_textview = (TextView) findViewById(R.id.StreetAddress_textview);

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

                // Create a new intent to open the Set Event Location Activity
                Intent intent = new Intent(CreateEventActivity.this,
                        SetEventLocationActivity.class);

                // Start the new activity
                startActivity(intent);
            }
        });
     {

Activity 2:

    TextView street_address_textview;
    TextView set_location_button;

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

        // Inflate Create Event activity in order to access street address textview
        View inflatedView = getLayoutInflater().inflate(R.layout.activity_create_event, null);
        street_address_textview = (TextView) inflatedView.findViewById(R.id.StreetAddress_textview);

        set_location_button = (TextView) findViewById(R.id.set_location_button);

        // When Set Location button is clicked, set street address textview, close activity
        set_location_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(chosenLatLng != null) {
                    chosenLocationString = chosenLatLng.toString();
                    street_address_textview.setText(chosenLocationString);

                    SetEventLocationActivity.this.finish();
                }
            }
        });
    }

谢谢!

膨胀视图并不意味着它是可见的,除非您在膨胀时传递 parent View 对象和 attachToRoot true。在上面的代码片段中,您只是使用 LayoutInflater 实例化了一个新的 View 对象。但它与 Activity1 中显示的 View 不同,而只是同一 View 的另一个实例。有几种方法可以实现您的目标,但我认为以下方法对您的情况有意义。首先,您必须通过调用 startActivityForResult() 方法而不是 startActivity() 来启动 Activity2 并在 onActivityResult() 中获取结果。这是一个例子,

Activity 1:

private static final int YOUR_REQUEST = 123;
TextView streetAddress_textview;

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

        streetAddress_textview = (TextView) findViewById(R.id.StreetAddress_textview);

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

                // Create a new intent to open the Set Event Location Activity
                Intent intent = new Intent(CreateEventActivity.this,
                        SetEventLocationActivity.class);

                // Start the new activity
                startActivityForResult(intent, YOUR_REQUEST);
            }
        });
     }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Check which request we're responding to
        if (requestCode == YOUR_REQUEST) {
            // Make sure the request was successful
            if (resultCode == RESULT_OK) {
                String returnString = data.getStringExtra("result");
                streetAddress_textview.setText(returnString);
            }
        }
    }

Activity 2:

TextView set_location_button;

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

        set_location_button = (TextView) findViewById(R.id.set_location_button);

        // When Set Location button is clicked, set street address textview, close activity
        set_location_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(chosenLatLng != null) {
                    chosenLocationString = chosenLatLng.toString();
                    Intent returnIntent = new Intent();
                    returnIntent.putExtra("result", chosenLocationString);
                    setResult(Activity.RESULT_OK,returnIntent);
                    SetEventLocationActivity.this.finish();
                }
            }
        });
    }

希望以上方案能解决您的问题。编码愉快:)