如何在Android中的“活动”之间传递数据

时间:2020-10-01 20:41:35

标签: java android android-studio class

如何在Android的“活动”之间传递数据?

示例:我分组了 CardView在第二个活动中,我收集了这张卡 (它向用户显示此活动中有多少张卡)

我想将卡号传递给第一个活动

第二项活动

public class Skin extends AppCompatActivity   {
    private Toolbar toolbar;
    public TextView tx;
    private  static  int mysize;
    public List<SettersAndGetters> lstPress;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mainm);
        TextView tt = (TextView) findViewById(R.id.titel_card);
        Button add = (Button) findViewById(R.id.add);

        toolbar = (Toolbar) findViewById(R.id.toolbar20);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                v.setFocusableInTouchMode(true);
                v.requestFocus();
                onBackPressed();
            }
        });


        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Skin.this, ADD.class);
                startActivity(intent);
            }
        });

//The contents of the card that you collected
        tt.setText(R.string.cn1);

        lstPress = new ArrayList<>();
        lstPress.add(new SettersAndGetters(R.string.cr5, R.string.c2, R.string.com1, R.string.des5, R.drawable.p5, 120, 55, 10000005));
        lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));
        lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));
        lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));
        lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));
        lstPress.add(new SettersAndGetters(R.string.cr1, R.string.c2, R.string.com1, R.string.des1, R.drawable.p2, 12, 12, 1800000));

        tx = (TextView) findViewById(R.id.c);
        int size = lstPress.size();     //here This line works great for me, but I want it in the first class (pass it to a class before it)
        tx.setText("" + size);
        mysize=size;



        Toast.makeText(getApplicationContext(),"Size="+size,Toast.LENGTH_LONG).show();




        RecyclerView myr = (RecyclerView) findViewById(R.id.recycler_view);
        RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(this, lstPress);
        myr.setLayoutManager(new GridLayoutManager(this, 2));
        myr.setAdapter(myAdapter);



    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        return true;

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_add, menu);
        // Inflate switch
        ImageButton re = (ImageButton) menu.findItem(R.id.item_switch2)
                .getActionView().findViewById(R.id.back2);






        re.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
                Toast.makeText(Skin.this, "hhi", Toast.LENGTH_SHORT).show();
            }
        });



        ImageButton btnubload = (ImageButton) menu.findItem(R.id.item_switch2)
                .getActionView().findViewById(R.id.btnaddUPLOAD);






        btnubload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Skin.this, ADD.class);
                startActivity(intent);



            }
        });





        return true;




    }

    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
    }

    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }




public static int getMysize(){


        return mysize;

}


}

MainActivity是第一个活动

    public class MainActivity extends AppCompatActivity implements BootShett.BottomSheetListener {


protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mainm);
        TextView tt = (TextView) findViewById(R.id.Number_of_badges)


 int c=Skin.getMysize();
        tt.setText(""+c);


}

3 个答案:

答案 0 :(得分:2)

要在活动之间传递数据,请使用Intents

例如,在打开“活动”之前设置一些数据:

Intent intent = new Intent(Skin.this, ADD.class);
intent.putExtra("key_a", "hello world");
intent.putExtra("key_b", 123);
intent.putExtra("key_c", true);
startActivity(intent);

并在其他活动中检索它:

protected void onCreate(Bundle savedInstanceState) {
    ....
    final String valueA = this.getIntent().getStringExtra("key_a");
    final int valueB = this.getIntent().getIntExtra("key_b", 0);
    final boolean valueC = this.getIntent().getBooleanExtra("key_c", false);
    ....
}

如果相反,则需要从第二个活动中返回一个值,因此在反向模式下,请使用startActivityForResult(而不是startActivity)开始第二个活动,然后在第一个活动是onActivityResult方法来处理结果。有关从活动返回值的更多文档,请参见this link

示例:

  1. 在第一个活动中,您必须使用 startActivityForResult 开始第二个活动:

    Intent intent = new Intent(this, SecondActivity.class);  
    this.startActivityForResult(intent, YUR_REQUEST_CODE);
    
  2. 在第二个活动中,通过调用 finish 将其关闭,然后使用 setResult 设置返回值:

    public void onClick(View view) { 
       final Intent intent = new Intent();  
       intent.putExtra("key_a", 1234567890);  
       setResult(YUR_REQUEST_CODE, intent);  
       finish();
    }  
    
  3. 回到第一个活动时,您将自动通过 onActivityResult

    方法获取结果
    @Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
    
       if (requestCode == YOUR_REQUEST_CODE) {
          final int value = data.getIntExtra("key_a", 0);
           ....
       }
    

    }

答案 1 :(得分:1)

您还可以使用共享首选项:

在第一次活动中添加此代码

SharedPreferences sp;
sp = getSharedPreferences("card",MODE_PRIVATE);
int cardNumber = Skin.getMysize();
sp.edit().putInt("card_number", cardNumber).apply();

在第二个活动中添加此代码

SharedPreferences sp;
sp = getSharedPreferences("card",MODE_PRIVATE);
int cardNumber = sp.getInt("card_number", "");

答案 2 :(得分:1)

在这种情况下,只需在第二个活动中执行此操作即可:

Intent intent = new Intent();
intent.putExtra(key, value);
setResult(result key, intent); 
finish();

在您的第一个活动中,通过onActivityResult获取结果

相关问题