[英]How to perform onclick action on multiple buttons created dynamically in Android Studio
[英]How to handle dynamically created buttons in android?
我是 android 開發的新手,實際上它是我的第一個應用程序。 我在基於 Json 的項目中創建了一個動態布局。 每個對象都包含一個“id”鍵和一些更多的字符串鍵。 我的 json 中的每個對象都應該轉換為 recylcerview 中的 cardview,並且每個 cardview 都有一個按鈕。 我的問題是處理這些動態按鈕。 是否可以確定單擊了哪個按鈕?
View.id
是一個整數,如果View
是動態生成的,則View.tag
設置任意值,但您可以使用的是View.tag
。 所以你可以將 JSON 中定義的 id 分配給tag
,然后在View
被點擊時檢查tag
值。 例如
val view1 = View(context)
view1.tag = "id from JSON 1"
view1.setOnClickListener(this::onViewClicked)
val view2 = View(context)
view2.tag = "id from JSON 2"
view2.setOnClickListener(this::onViewClicked)
// ...
private fun onViewClicked(view: View){
val jsonId = view.tag as? String
// ...
}
如果您的最小 sdk 級別至少為 17,另一種選擇是使用View.generateViewId()
動態生成 id,並將它們與您的 JSON id 一起存儲在Map
使用標簽來區分按鈕。 將OnClickListener
添加到所有Button
並為Button
設置不同的 String 標簽。
button.setOnClickListener(this);
添加點擊監聽器
@Override
public void onClick(View view){
String tag = (String)view.getTag();
if(tag.equals(tag1)){
// action here
}
//.......
.....
}
是的,很直接,你所要做的就是給他們一個唯一的 id 我假設你必須有一個 JSON 數組來創建動態按鈕。
示例代碼
public Button createButton(Context context,String text,int buttonNo){
//here set the properties
Button bt = new Button(context);
bt.setText(text);
bt.setId(buttonNo);
bt.setTag(buttonNo);
bt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//handle the button click, unique id , you can use to differentiate
int id = view.getId();
}
});
return bt;
}
在 for 循環中調用上述方法或多次調用。 您還可以設置如上所述的標簽來存儲更多信息。
最后,我將 OnClickListener 放在我的 customAdapter 類中的 onBindViewHolder 事件中,如下所示:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> implements View.OnClickListener {
private Context context;
private List<MyData> my_data;
public CustomAdapter(Context context, List<MyData> my_data) {
this.context = context;
this.my_data = my_data;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.match_date.setText(my_data.get(position).getMatch_date());
holder.home_name.setText(my_data.get(position).getHome_name());
holder.away_name.setText(my_data.get(position).getAway_name());
holder.button.setId(my_data.get(position).getId());
holder.button.setTag(my_data.get(position).getStringId());
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int intHomeGoals = Integer.parseInt(holder.edtHomeGoals.getText().toString());
int intAwayGoals = Integer.parseInt(holder.edtAwayGoals.getText().toString());
if (intHomeGoals == intAwayGoals)
{
Toast.makeText(context, "00000", Toast.LENGTH_SHORT).show();
}
}
});
Glide.with(context).load(my_data.get(position).getHome_logo()).into(holder.home_logo);
Glide.with(context).load(my_data.get(position).getAway_logo()).into(holder.away_logo);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.