gpt4 book ai didi

java - 将参数传递给按钮

转载 作者:行者123 更新时间:2023-12-01 20:00:30 25 4
gpt4 key购买 nike

我正在处理一个问题,我需要能够将特定参数传递给按钮的 onClick 方法。我想做的是这样的:

public class MainActivity extends AppCompatActivity {

private static int clicked = 0;

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

final ImageButton btn = findViewById(R.id.imageButton2);
btn.setOnClickListener(new WhenClicked(btn, getApplicationContext()));
}

public static void incrementClicked()
{
clicked += 1;
}
}

我知道实现这项工作的一种方法是拥有我们自己的“OnClickListener”,但后来我遇到了处理上下文的问题,因为我想产生一个新的 Intent 。

像这样的解决方案可能可行,但有一些大问题

public class WhenClicked implements View.OnClickListener {

private Context context; //this is obviously bad
private ImageButton imgbtn;


public WhenClicked(ImageButton imgbutton, Context context)
{
this.context = context;
this.imgbtn = imgbutton;
}

@Override
public void onClick(View view) {
imgbtn.setColorFilter(Color.argb(150, 255, 255, 255));
MainActivity.incrementClicked();
//now to spawn an activity
}
}

编辑:由于问题似乎不清楚,我已经在我的工作解决方案中进行了编辑。现在的问题是找到一种不需要将上下文存储为实例变量的方法。

最佳答案

将按钮移至“Activity ”级别并将其设置为私有(private),它将在内部类中可见 - OnClickListener。关于上下文,您可以在 onClick 中访问它,就像 MainActivity.this 一样。

public class MainActivity extends AppCompatActivity {

private int clicked = 0;

private ImageButton btn;

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

btn = findViewById(R.id.imageButton2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
btn.setColorFilter(Color.argb(150, 255, 255, 255));//sets a tint

// PART YOU ARE INTERESTED IN
clicked++;
Intent intent = new Intent(MainActivity.this, Someclass.class);
}
});
}
}

如果您需要它作为自定义监听器类,您可以这样做:

public class CustomOnClickListener implements OnClickListener {
int clicked = 0 ;

@Override
public void onClick(View v) {
// here comes View, not ImageButton, so you should check if it is ImageButton and then set tint
if (v instanceof ImageButton) {
((ImageButton)v).setColorFilter(Color.argb(150, 255, 255, 255));
}

// PART YOU ARE INTERESTED IN
clicked++;
Intent intent = new Intent(v.getContext(), Someclass.class);
}
}

正如你在这里看到的,你有上下文 - v.getContext() 。即使 View 都保存上下文,因此可以从 clickListener 访问它,并且不需要通过构造函数传递它。

关于java - 将参数传递给按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48057968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com