首页 > 解决方案 > TextView 未从其他活动更新

问题描述

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

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

活动一:

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

活动二:

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

谢谢!

标签: androidandroid-activitytextview

解决方案


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

活动一:

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

活动二:

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

我希望上述解决方案能解决您的问题。快乐编码:)


推荐阅读