我不知道在我的order.setOnClickerListener的if语句中要比较什么来让我的代码正常工作。我正在尝试根据按下按钮时从数组中选择的图像来设置文本。
现在,当按下按钮时,我试图依次查看每个图像以决定用户是否选择了它。但是,我不知道如何判断用户是否选择了特定图像。我应该用****
代替什么来确定?
public class Breakfast extends AppCompatActivity {
Integer[]Foods = {R.drawable.pancakes, R.drawable.frenchtoast, R.drawable.waffles,
R.drawable.omelet};
ImageView pic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);
setContentView(R.layout.activity_breakfast); GridView grid = (GridView) findViewById(R.id.gridView);
final ImageView pic = (ImageView) findViewById(R.id.imgLarge);
final TextView food = (TextView) findViewById(R.id.txtFood);
Button back = (Button) findViewById(R.id.btnBack);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Breakfast.this, MainActivity.class));
}
});
final Button order = (Button) findViewById(R.id.btnOrder);
order.setEnabled(false);
order.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(Foods[0] == ****){
Toast.makeText(getBaseContext(), "Pancakes added to your order", Toast.LENGTH_SHORT).show();
food.setText("You've selected Pankcakes");}
if(Foods[1] == ****){
Toast.makeText(getBaseContext(), "French Toast added to your order", Toast.LENGTH_SHORT).show();
food.setText("You've selected French Toast");}
if(Foods[2] == ****){
Toast.makeText(getBaseContext(), "Waffles added to your order", Toast.LENGTH_SHORT).show();
food.setText("You've selected Waffles");}
if(Foods[3] == ****){
Toast.makeText(getBaseContext(), "Omelet added to your order", Toast.LENGTH_SHORT).show();
food.setText("You've selected Omelet");}
}
});
grid.setAdapter(new ImageAdapter(this));
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
pic.setImageResource(Foods[position]);
order.setEnabled(true);
}
});
}
}
还有一些代码,但我认为它不相关。
答案 0 :(得分:1)
在布局XML中使用多个(在您的情况下为4),ImageView
:
<ImageView
android:id="@+id/pancakes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pancakes"/>
<ImageView
android:id="@+id/frenchtoast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/frenchtoast"/>
<ImageView
android:id="@+id/waffles"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/waffles"/>
<ImageView
android:id="@+id/omelet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/omelet"/>
然后,在您的活动中为所有人添加一个监听器,并通过更新imageSelected
变量跟踪所点击的图像:
public class Breakfast extends AppCompatActivity implements View.OnClickListener {
private int imageSelected;
ImageView pancakes;
ImageView frenchtoast;
ImageView waffles;
ImageView omelet;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ... your code
pancakes.setOnClickListener(this);
frenchtoast.setOnClickListener(this);
waffles.setOnClickListener(this);
omelet.setOnClickListener(this);
// ... more code
}
@Override
public void onClick(View v) {
imageSelected = v.getId();
}
}
这是OnClickListener
按钮的order
:
order.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (imageSelected == pancakes.getId()) {
Toast.makeText(getBaseContext(), "Pancakes added to your order", Toast.LENGTH_SHORT).show();
food.setText("You've selected Pankcakes");
}
if (imageSelected == frenchtoast.getId()) {
Toast.makeText(getBaseContext(), "French Toast added to your order", Toast.LENGTH_SHORT).show();
food.setText("You've selected French Toast");
}
if (imageSelected == waffles.getId()) {
Toast.makeText(getBaseContext(), "Waffles added to your order", Toast.LENGTH_SHORT).show();
food.setText("You've selected Waffles");
}
if (imageSelected == omelet.getID()) {
Toast.makeText(getBaseContext(), "Omelet added to your order", Toast.LENGTH_SHORT).show();
food.setText("You've selected Omelet");
}
}
});
答案 1 :(得分:0)
我认为您不想按照尝试的方式执行此操作(即您不希望仅在某些条件下替换代码示例中的****
并将其命名为天)。
这里有几个选项(网上有很多代码示例)。一种是使用HorizontalScrollView或ListView。这样做的好处是可以更容易地更改以后显示的图像(而不是硬编码,这需要代码更新并在每次更改显示的图像时重新部署)。
还有一个Gallery类,但它已被弃用。
如果您确实想要对这些值进行硬编码,并且可以解决以后可能导致的潜在维护和部署问题,则可以尝试对每个值使用ImageButton。从文档中,一个ImageButton
显示一个按钮,其中包含可由用户按下或单击的图像(而不是文本)。默认情况下,ImageButton看起来像常规Button,标准按钮背景在不同按钮状态下改变颜色。按钮表面上的图像由XML元素中的android:src属性或setImageResource(int)方法定义。
@lalongooo在他的回答中显示了一个代码示例,说明如何做类似的事情。
还有一个关于使用复选框创建ListView的教程here。我还没有仔细阅读过这个教程,但是他们试图实现的图像看起来非常不错,它可能适合您的目的。您可能想尝试实现类似的东西。 (我在Bing中搜索了“复选框列表视图android”这个短语,发现如果你很好奇或想在同一主题上找到更多的教程/示例)。