【问题标题】:Best way to handle multiple event listeners处理多个事件监听器的最佳方式
【发布时间】:2014-05-24 21:19:35
【问题描述】:

假设我有一个微调器(有 2 个项目)和一个单选组(有 2 个单选按钮)。

例如,我想在我的布局中显示一个 TextView,每个选项都有不同的值:

例如我们有:

微调器


女性

广播组

真假

所以我们有4个案例:

  1. 男真
  2. 女假
  3. 男假
  4. 女真

简而言之,每次用户选择这些选项中的任何一个时,我都想显示不同的文本视图。 我在微调器和单选按钮上放置了事件监听器:

微调器监听器

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View arg1,
                int arg2, long arg3) {
            ``// TODO Auto-generated method stub
        }

广播组监听器

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO Auto-generated method stub
                          //switch checkedId and check which spinner item is selected...
                          //then show the textview
                     }

但这有时有效,有时无效-我遇到了许多不同的问题。 我也尝试过类似的选择。但没有任何效果。

如何在添加额外按钮的情况下动态处理这个问题?

【问题讨论】:

  • 创建一个您将在这两个侦听器中调用的方法,然后检查两者的值以确定要显示的视图。
  • @LarryMcKenzie McKenzie 我不确定我理解你的意思。

标签: android android-event


【解决方案1】:

希望这能更好地解释我的评论。

int selectedSpinnerItem = -1;
int selectedRadioGroupItem = -1;

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
        selectedSpinnerItem = position;
        updateViews();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        selectedSpinnerItem = -1;
        updateViews();
    }
});

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        selectedRadioGroupItem = checkedId;
        updateViews();
    }
});

public void updateViews(){
    // Here is where you will compare the values 
    // and display the appropriate views.
}

【讨论】:

  • 我尝试过类似的变量。我会尝试您的解决方案,稍后再回来接受/支持答案。
  • 如果这不起作用,请更新您的问题,向我展示您是如何实现它的。
  • 绝对!谢谢
  • 我不知道这是否是最佳实践/有效的方式,但您的逻辑很简单并且工作完美。谢谢你:)
【解决方案2】:

你可以创建所有你想要的TextViews..

不仅仅是改变他们的可见性..

TextView v = (TextView) findViewById(R.id.text1);
v.setVisibility(View.GONE); // Or view.VISIBLE, View.INVISIBLE

因此您可以根据自己的逻辑查看所需的特定文本视图。 或者您可以只创建 2 个文本视图。一个用于男性/女性,一个用于真/假;

我认为最好的办法是在一般 textView 上更改文本。但我不确定是什么问题,因为我没有可以帮助我理解的代码示例

希望这会有所帮助:)

【讨论】:

  • 谢谢,但这不是我的问题。问题是我找不到可靠的方法来知道同时选择了哪个微调器项目和哪个单选按钮。不是我将如何更改文本视图。
  • 对不起,但我不确定我是否理解.. spinner.getSelectedItem() 方法和 radioonButton 相同。此链接可能会有所帮助:mkyong.com/android/android-radio-buttons-example 如果您可以解释并添加代码部分,我将能够提供更多帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多