如何通过多个按钮使用putExtras

时间:2019-02-23 14:05:31

标签: java android

我想将putExtras与getExtras中的if语句一起使用。如果在第一个活动中单击图像,它应该执行一个动作,但是当我在第一个活动中单击其他图像时,它应该执行另一个动作。

这是我的代码,代码可以工作,但不知道如何区分下一个活动中的动作:

public class wuu extends AppCompatActivity {
    TextView t1, t2, t3, t4, t5, t6, t7, t8, t9;
    frix_wuxu aa = new frix_wuxu();

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wuu);
        t1 = (TextView) findViewById(R.id.first);
        t2 = (TextView) findViewById(R.id.second);
        final Bundle extras = new Bundle();
        extras.putString("abc", "a");
        extras.putString("name", "b");

        t1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(wuzu.this, frix_wuxu.class);
                intent.putExtras(extras);
                startActivity(intent);
            }
        });

        t2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(wuzu.this, frix_wuxu.class);
                intent.putExtras(extras);
                startActivity(intent);
            }
        });
    }
}

2 个答案:

答案 0 :(得分:0)

在下一个活动中,如果您想知道哪个动作(基于单击哪个按钮),则可以在其中添加一个字符串,例如

t1.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(wuzu.this, frix_wuxu.class);
        intent.putExtras(extras);
        intent.putExtra("action", "first");
        startActivity(intent);
    }
});

t2.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(wuzu.this, frix_wuxu.class);
        intent.putExtras(extras);
        intent.putExtra("action", "second");
        startActivity(intent);
    }
});

在下一个活动中

public class NextActivity extends AppCompatActivity {

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

        String action = getIntent().getStringExtra("action");

        if (action.equals("first")) {
            Log.i("TAG", "First button is clicked");
        } else if (action.equals("second")) {
            Log.i("TAG", "Second button is clicked");
        }
    }
}

答案 1 :(得分:0)

您只需要在putExtra中添加另一个值作为标志。通常,您可以通过使用如下枚举来实现它:

public Enum Action {
  ONE, TWO
}

然后将其添加到您的Extra中:

final Bundle extras = new Bundle();
extras.putString("abc", "a");
extras.putString("name", "b");

// add the action 
extras.putSerializable("action", Action.ONE);

更好的方法是将全部数据和Action打包为pojo,如下所示:

// You can also use Parcelable instead of Serializable.
public class MyData implement Serializable {
  private String abc;
  private String name;
  private Action action;

  // constructor
  // setter
  // getter
}

然后您可以将其用于其他功能:

MyData myData = new MyData();
myData.setAbc("a");
myData.setName("b");
myDaya.setAction(Action.ONE);
final Bundle extras = new Bundle();
extras.putSerializable("myData", myData);

要在下一个活动中阅读它,可以使用以下方法:

Intent intent = getIntent();
Bundle bundle = intent.getExtras();

MyData myData = (MyData) bundle.getSerializable("myData");

// then do something by the action:
switch (myData.getAction) {
   case ONE:
     // do something
   break;
   case TWO:
     // do something
   break;
}