如何确定用户在按钮单击事件处理程序中选择的图像?

时间:2017-06-26 18:48:53

标签: java android arrays if-statement arraylist

我不知道在我的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);
            }
        });
    }
}

还有一些代码,但我认为它不相关。

2 个答案:

答案 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)

我认为您不想按照尝试的方式执行此操作(即您不希望仅在某些条件下替换代码示例中的****并将其命名为天)。

这里有几个选项(网上有很多代码示例)。一种是使用HorizontalScrollViewListView。这样做的好处是可以更容易地更改以后显示的图像(而不是硬编码,这需要代码更新并在每次更改显示的图像时重新部署)。

还有一个Gallery类,但它已被弃用。

如果您确实想要对这些值进行硬编码,并且可以解决以后可能导致的潜在维护和部署问题,则可以尝试对每个值使用ImageButton。从文档中,一个ImageButton

  

显示一个按钮,其中包含可由用户按下或单击的图像(而不是文本)。默认情况下,ImageButton看起来像常规Button,标准按钮背景在不同按钮状态下改变颜色。按钮表面上的图像由XML元素中的android:src属性或setImageResource(int)方法定义。

@lalongooo在他的回答中显示了一个代码示例,说明如何做类似的事情。

还有一个关于使用复选框创建ListView的教程here。我还没有仔细阅读过这个教程,但是他们试图实现的图像看起来非常不错,它可能适合您的目的。您可能想尝试实现类似的东西。 (我在Bing中搜索了“复选框列表视图android”这个短语,发现如果你很好奇或想在同一主题上找到更多的教程/示例)。