передать данные приращения из второго действия в первое действие - PullRequest
0 голосов
/ 14 марта 2019

В моем первом Activity кнопка «+» открывает второе действие. Во втором упражнении я хочу нажать кнопку, чтобы добавить счетчик и передать этот инкрементный номер моему первому занятию. Прямо сейчас я могу добавить на счетчик только с первого занятия.

MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button addBtn;
int quantity = 0;

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

    addBtn = (Button) findViewById(R.id.addBtn);
    addBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openAddStarActivity();
        }
    });
}

public void openAddStarActivity() {
    Intent intent = new Intent(this, AddStarActivity.class);
    startActivity(intent);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if(resultCode == RESULT_OK) {
            TextView textView = (TextView)
findViewById(R.id.quantity_text_view);
            textView.setText(data.getStringExtra("textViewText"));
        }
    }
}

public void increment(View view) {
    if (quantity == 100) {
        return;
    }
    quantity = quantity + 1;
    displayQuantity(quantity);
}

private void displayQuantity(int numberOfStars) {
    TextView quantityTextView = (TextView) 
findViewById(R.id.quantity_text_view);
    quantityTextView.setText("" + numberOfStars);
}



}


AddStarActivity.java
public class AddStarActivity extends AppCompatActivity {
int quantity = 0;


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

}

public void increment(View view) {
    if (quantity == 100) {
        return;
    }
    quantity = quantity + 1;
    displayQuantity(quantity);
}

private void displayQuantity(int numberOfStars) {
    TextView quantityTextView = (TextView) 
findViewById(R.id.quantity_text_view);
    quantityTextView.setText("" + numberOfStars);
}

@Override
public void onBackPressed(){
    TextView textView = (TextView) findViewById(R.id.quantity_text_view);
    Intent i = new Intent(this,MainActivity.class);
    setResult(RESULT_OK, i);
    i.putExtra("textViewText", textView.getText().toString());
    startActivityForResult(i,0);
}
}

Я добавил Textview для второго упражнения, чтобы я мог просто передать эти данные textview в поле данных textview для моего первого действия

Ответы [ 3 ]

1 голос
/ 14 марта 2019

Сделайте количество общедоступным статическим в MainActivity и увеличьте ту же статическую переменную в AddStarActivity.Таким образом, ваша функция будет

public void increment(View view) {
    if (MainActivity.quantity == 100) {
        return;
    }
    MainActivity.quantity++;
    displayQuantity(MainActivity.quantity);
}
0 голосов
/ 14 марта 2019

Ваша MainActivity не должна вызывать startActivity, но вместо этого должна вызывать startActivityForResult при запуске AddStarActivity. Затем в AddStarActivity вы вызываете setResult при увеличении. И наконец, удалите onBackPressed из AddStarActivity. Когда пользователь нажимает кнопку «Назад», чтобы перейти от вашей AddStarActivity обратно к MainActivity (что означает, что система будет finish AddStarActivity), тогда будет вызываться MainActivity#onActivityResult.

0 голосов
/ 14 марта 2019

Вы можете сделать это с буксирным путем, который ниже

Приемник вещания
Зарегистрируйте трансляцию в вашем первом действии и действие огня из вашего второго действия с данными, как показано в примере ниже В вашем первом занятии

BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent != null && intent.getAction() != null && intent.getAction().equals("SendCounter")) {
                    counter=intent.getIntExtra("value",0);
                }
            }
        };
        registerReceiver(receiver,new IntentFilter("value"));

В вашем втором занятии

Intent intent=new Intent("SendCounter");
        intent.putExtra("value",counterValue);
        sendBroadcast(intent);

Статический член
Определите одну переменную в своей деятельности и определите как статическую, чтобы вы могли обращаться к этому конкретному члену как к статической.

В вашем первом занятии

public static int counter;

Теперь во втором упражнении вы можете добавить значение в первую переменную занятия, например:

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