将增量数据从第二个活动传递到第一个活动

时间:2019-03-14 04:14:32

标签: android android-activity

在我的第一个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数据字段中

3 个答案:

答案 0 :(得分:1)

在MainActivity中使数量成为公共静态变量,并在AddStarActivity中增加相同的静态变量。所以你的功能将是

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

答案 1 :(得分:0)

您可以通过以下波纹管方式进行操作

广播接收器
在您的第一个活动中注册广播,并从您的第二个活动中射击,并使用以下示例的数据 在您的第一次活动中

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

答案 2 :(得分:0)

启动AddStarActivity时,MainActivity不应调用startActivity,而应调用startActivityForResult。然后在AddStarActivity中,递增时将调用setResult。最后,从AddStarActivity中删除onBackPressed。当用户单击“后退”按钮从您的AddStarActivity返回到MainActivity(意味着系统将finish添加StarActivity)时,将调用MainActivity#onActivityResult