Как я могу обновить не MainActivity Activity через поток? - PullRequest
0 голосов
/ 19 июня 2019

Я хочу обновить Activity, которая не является MainActivity.

Поэтому я запускаю вторую Activity с помощью метода onClick в MainActivity.

Теперь активация "SecondActivity" находится впереди.Когда я запустил поток в «MainActivity», как я могу ссылаться на «SecondActivity» для обновления их TextViews и т. Д.?

PseudoCode

 public class activity_MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ThreadSome threadSome= new ThreadSome();
        threadSome.start()
    }

   onClick(View View){

   Intent intent = new Intent(this, activity_Second.class);
   startActivity(intent);
   }
}

Inside Thread


public class ThreadSome extends Thread {

    @Override
    public void run() {
      //This is what I don't know, so I just write what I want to do.
      // I know the following Code is wrong and not working.

      activity_Second.someTextView.setText("Hi");
    }
}

Является ли WeakReference лучшим способом сделать это или лучше работать со статическими объектами TextView?Как бы вы решили эту проблему?

1 Ответ

1 голос
/ 20 июня 2019

Исходя из вашего описания, я думаю, что вы хотите сделать что-то, где будет некоторое изменение пользовательского интерфейса в стеке действий, основанное на каком-то событии, выполненном в forground деятельности.Есть хороший способ использовать onActivityResult () через startActivityForResult (), но если это не полностью отвечает вашим требованиям, вы можете попробовать что-то вроде следующего:

/**
    UpdateActivity is the activity where some ui update or action will be taken based on event in EventActivity.
**/

public class UpdateActivity extends Activity {

    private BroadcastReceiver mReceiver;
    public static final String ACTION_UPDATE = "com.my.internal.activity.action";

    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_update);

        ......

        //Prepared Intent for broadcast receiver
        IntentFilter intentFilter = new IntentFilter(ACTION_UPDATE);
        //registering our receiver
        this.registerReceiver(mReceiver, intentFilter);

        .....
    }

    //This is the receiver section where you need to do the ui update
    mReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            //extract our message from intent
            String some_msg = intent.getStringExtra("msg_1"); //parameter received if passed in intent when broadcast called.
            //log our message value
            Log.i("Message", some_msg);

            updateActivityUi();
        }
    };

    private void updateActivityUi() {
        // you need to write the code for the update which you want to do after an event done in other activity.
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        //unregister our receiver
        this.unregisterReceiver(this.mReceiver);
    }
}

public class EventActivity extends Activity {

    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);

        ......

        //Sending BroadcastReceiver against the action ACTION_UPDATE and it will be received by UpdateActivity.
        if(condition_for_event) {
            Intent i = new Intent(UpdateActivity.ACTION_UPDATE).putExtra("msg_1", "Hey! an event performed here.");
            this.sendBroadcast(i);
        }

        .....
    }

    ....
}

Дайте мне знать, если это решило вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...