【问题标题】:how to know which button is clicked in other activity如何知道在其他活动中单击了哪个按钮
【发布时间】:2020-01-02 05:32:31
【问题描述】:

我有两个活动,Activity 1Activity 2Activity 1 包含 8 个按钮,每个按钮通过 Intent 向 Activity 2 发送一些数据,Activity 2 获取数据并显示在 listview 中。我想根据条件在列表视图中显示数据,所以在Activity 2 中,我将每个按钮数据放在if 块中

所以我的问题是

我应该在if(condition?) 中放置什么条件才能知道在Activity 1 中单击了哪个按钮
我的Activity 1
public void hmoral(View v){
        moralref.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {

            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()){
                    List<String> moraldata = new ArrayList<>();
                    Map<String,Object> map = task.getResult().getData();
                    for (Map.Entry<String,Object> entry:map.entrySet()){
                        moraldata.add(entry.getKey());
                        Log.d(TAG,entry.getKey());
                    }
                      Intent intent1 = new Intent(Activity1.this,Activity2.class);
                      intent1.putExtra("moraldata", (Serializable) moraldata);
                      startActivity(intent1);

                }
                }
        });
    }


    public  void hhorror(View v){
        horrorref.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()){
                    List<String> horrordata = new ArrayList<>();
                    Map<String,Object> map = task.getResult().getData();
                    for (Map.Entry<String,Object> entry:map.entrySet()){
                        horrordata.add(entry.getKey());
                        Log.d(TAG,entry.getKey());
                    }
                      Intent intent = new Intent(Activity1.this,Activity2.class);
                      intent.putExtra("horrordata", (Serializable) horrordata);
                      startActivity(intent);

                }

            }
        });

    }
}

Activity2的代码如下:

public class ListAcivity extends AppCompatActivity {
    ListView originallist;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_acivity);
        originallist = findViewById(R.id.originallist);


        if (){

          ArrayList<String> morallist = getIntent().getStringArrayListExtra("moraldata");
          ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,morallist);
          originallist.setAdapter(arrayAdapter);
        }

         if (){
        ArrayList<String> horrorlist =  getIntent().getStringArrayListExtra("horrordata");
        ArrayAdapter<String>arrayAdapter1 = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,horrorlist);
        originallist.setAdapter(arrayAdapter1);
         }


    }

【问题讨论】:

  • 你有 8 个按钮,而且都有不同的名称对吗?
  • 是的,我有 8 个不同名称和 id 的按钮

标签: java android android-intent android-activity


【解决方案1】:

如何知道在其他活动中点击了哪个按钮

使用 Intent 将 Button id 发送到下一个 Activity:

intent.putExtra("clicked_view_id", view.getId());

现在使用 clicked_view_id 和 switch case 来与按钮 ID 进行比较:

int clickedButtonID = getIntent().getIntExtra("clicked_view_id", 0);
switch(clickedButtonID){
  case R.id.button1:
   ...
   break;
  case R.id.button2:
   ... 
   break;

} 

【讨论】:

  • 为什么默认值为零
  • @RahulSingh getIntExtra 方法需要两个参数,第一个是键,第二个参数是默认值,如果在 Intent 中找不到 key。你可以在 switch case 中使用default 来处理这种情况
  • @RahulSingh: 或者您可以使用任何默认值,例如 R.id.button1 来处理未找到密钥的情况。
  • 打扰它工作得很好,但现在列表视图中没有显示任何数据
  • @RahulSingh:数据不可见其他问题。如果仍然遇到任何其他问题,请为此提出新问题。
【解决方案2】:

在你的活动1中:

    Private  String buttonText ="";

    yourButtonClick.setOnClickListener(this);

    @Override
public void onClick(View view) {
 buttonText = getIntent().getStringExtra("btn_text");

    switch (view.getId()) {
        case R.id.button1:
            buttonText = "buttonOne";
            break;
        case R.id.button2:
            buttonText = "buttonTwo";
            break;
        case R.id.button8:
            buttonText = "buttonEight";
            break;

       }

     }

  }
 Intent intent = new Intent(Activity1.this,Activity2.class);
                    intent.putExtra("btnClicked", buttonText);
                   startActivity(intent);

//在列表活动中

 String btnClicked = getIntent().getStringArrayListExtra("btnClicked");  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多