使用view.getId(),它会随机变化

时间:2018-11-02 17:44:22

标签: android

所以我使用了view.getId()来实现更改我的拥有权,例如:

public void changeLinear(View view) {
    layoutPrimer.setVisibility(view.getId() == R.id.btnPrimers ? View.VISIBLE : View.GONE);
    layoutSegon.setVisibility(view.getId() == R.id.btnSegons ? View.VISIBLE : View.GONE);
    layoutPostre.setVisibility(view.getId() == R.id.btnPostres ? View.VISIBLE : View.GONE);
    layoutExtra.setVisibility(view.getId() == R.id.btnExtres ? View.VISIBLE : View.GONE);
}

我正在尝试在view.getId() == R.id.btn..中实现相同的逻辑,方法是能够清除在我定义的radioGroup中的radioGroup:

public void displayFalse(View view) {

    if(view.getId() == R.id.btnPrimers){
        rgPrimer.clearCheck();
    }else if(view.getId() == R.id.btnSegons){
        rgSegon.clearCheck();
    }else if(view.getId() == R.id.btnPostres) {
        rgPostre.clearCheck();
    } else {
        swcTriaExtra1.setChecked(false);
        swcTriaExtra2.setChecked(false);
        swcTriaExtra3.setChecked(false);
        swcTriaExtra4.setChecked(false);
        swcTriaExtra5.setChecked(false);
    }
}

但是问题是第二个view.getId()与我在顶部函数中获得的那个不同,分别是7f070027和7f070022。

因此,我没有随时更改视图,而是使用了不同的view.getId()。因此,当我想在第二个函数中加入条件if(view.getId() == R.id.btnPrimers)时,它就不会进入,因为它有所不同。

这些视图ID的工作方式是什么?我该如何克服这个问题?有改进的版本吗?

1 个答案:

答案 0 :(得分:1)

假设您从不调用View.setId(),那么View.getId()应该向您返回布局文件中使用<app></app>分配给视图的值。在您的应用程序的生命周期内,这不应更改(重建应用程序后除外)。

我怀疑这里发生的是,在第二个比较中,您实际上是在比较子View的视图ID,这当然会不同于其父View。

出于调试目的,您可以考虑使用Resource.getResourceName来查看与视图相关的易于理解的名称:

index.php