0
final ImageView patientAllergyImage = (ImageView) findViewById(R.id.image);
patientAllergyImage.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        patientAllergyImage.setImageDrawable(getResources().
                getDrawable(R.drawable.nav_down_green));
        List.setVisibility(View.GONE);
    }
});

我正在制作要隐藏的列表,但是当我单击同一个按钮时如何显示它。我不能保持一个布尔值来检查它是否被点击,就像它说的那样......The final local variable clicked cannot be assigned, since it is defined in an enclosing type既不是一个non final变量

4

5 回答 5

8

试试这个,

     public void onClick(View V){
        patientAllergyImage.setImageDrawable(getResources().
                getDrawable(R.drawable.nav_down_green));
        List.setVisibility(List.isShown() ? View.GONE : View.VISIBLE); 
    }
于 2013-04-19T14:41:47.757 回答
3

您可以使用工具按钮代替典型按钮实现此目的

ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            // hide the listview
        } else {
            // show the listview
        }
    }
});
于 2013-04-19T14:37:07.927 回答
2

尝试这样的事情:

    public void onClick(View v) {
       // TODO Auto-generated method stub
       patientAllergyImage.setImageDrawable(getResources().
          getDrawable(R.drawable.nav_down_green));

       if(List.getVisibility()==View.VISIBLE){
          List.setVisibility(View.INVISIBLE)
       }else{
          List.setVisibility(View.VISIBLE)
       }
    }

如果需要,将 INVISIBLE 替换为 GONE。希望这有帮助。

于 2013-04-19T14:41:03.853 回答
1

删除final布尔变量或试试这个

试试这个

       if(List.getVisibility()==View.GONE)
        {
             List.setVisibility(View.VISIBLE);
        }
        if(List.getVisibility()==View.VISIBLE)
        {
             List.setVisibility(View.GONE);
        }
于 2013-04-19T14:37:55.607 回答
1

似乎这里有几个问题。

首先,您不应该将您的列表视图称为“列表”,这会掩盖名为列表的真实类。

  1. 如果你被困在一个不错的变量名上,最好使用带有小写“l”的“listView”。

  2. 你不需要在任何地方都使用 final 。

  3. 请改用 setImageResource 来保持代码的整洁和可读性。

  4. 可读时使用 ?true:false 语法

    ImageView patientAllergyImage = (ImageView) findViewById(R.id.image);
    patientAllergyImage.setOnClickListener(new OnClickListener() {
    
      @Override
      public void onClick(View v) {
    
      //see if the list view is visible
      bool bVisible = listView.getVisibility();
    
      //select the image resource
      int iImageRes = bVisible?R.drawable.nav_down_green:R.drawable.nav_up_green;
    
      //Toggle Image
      (ImageView)v.setImageResource(iImageRes);
    
      //Toggle List Visibility
      listView.setVisibility(bVisible?View.GONE:View.VISIBLE);
    
      }
    
    });
    
于 2013-04-19T15:05:45.167 回答