【问题标题】:How do I determine which image the user selected in a button click event handler? [closed]如何确定用户在按钮单击事件处理程序中选择的图像? [关闭]
【发布时间】:2017-06-26 18:48:53
【问题描述】:

我不知道在我的 if 语句中为我的 order.setOnClickerListener 比较什么来让我的代码正常工作。我正在尝试根据按下按钮时从数组中选择的图像来设置文本。

现在,当按下按钮时,我正在尝试依次查看每张图像以确定用户是否选择了它。但是,我不确定如何判断用户是否选择了特定图像。我应该用什么替换 **** 来确定?

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);
            }
        });
    }
}

还有一些代码,但我认为这无关紧要。

【问题讨论】:

  • 您使用 **** 而不是您的实际代码这一事实使得它真的很难帮助您...
  • 对您的问题一无所知请花时间解释您的问题我相信如果您努力写下这个问题,会有很多人愿意提供帮助。
  • 我同意 @JonSkeet 的观点 - 请在 if 声明中说明您目前正在尝试的内容。另外,请详细说明“正常工作”的含义-它现在在做什么,您希望它做什么?另请参阅:How to Askminimal reproducible example,尤其是Why is “Can someone help me?” not an actual question?
  • 或者您是在问用什么代替****?所以,基本上,您正在查看每个单独的图像,看看它是否是用户选择的那个?如果是这样,您能否说明您是如何在前端(在您的 XML 中)定义图像的?

标签: java android arrays if-statement arraylist


【解决方案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();
    }

}

这是您的order 按钮的OnClickListener

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");             
            }
        }
    });

【讨论】:

    【解决方案2】:

    我不认为您想以您尝试的方式执行此操作(即您不想只是用某些条件替换代码示例中的 **** 并称之为一天) .

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

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

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

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

    @lalongooo 在他的回答中展示了如何执行类似操作的代码示例。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2020-03-02
      • 2011-11-12
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多