适配器

时间:2017-05-15 09:17:43

标签: android listview

我知道View.GoneView.Invisible之间的区别,我遇到了一个奇怪的情况。我创建了一个包含视图的活动:

  • listView
  • maskView(自定义,没什么特别的,但创建一个位图)(在listView上面)

当我点击listView时,我想让maskView可见,但是我发现maskView没有显示我在listView上第二次点击的工具(奇怪的是我打印Log并找到了maskView.getVisibility() == Visible,但我只是无法在屏幕上看到它!但是当我继续点击时,maskView显示!实际上,它不会在第一时间显示)或设置maskView View.Invisible而不是View.Gone

那么让我告诉你如何以及何时设置maskView的可见性和响应。

  1. 在活动

    1)一个独立的按钮,button.click{ maskView.setVisible() }

    2)或maskView.setVisibility(View.VISIBLE)

    之后直接findView

    3)或在listView:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
       maskView.setVisibility(View.VISIBLE)
      }
     });
    

    他们都在工作!(呃......我不开玩笑,让我们继续)

  2. 在适配器

    我在我的适配器中创建一个观察者:

    private MaskViewListener maskViewListener;
    public interface MaskViewListener {
    void showMask(int mPiercedX, int mPiercedY, int mWidth, int mHeight);
    void cancelMask();
     }
    

    我的活动注册了这个监听器。

    1)listView(在活动中)

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
        mAdapter.getMaskViewListener().showMask(0,0,100,200);
        }
      });
    
      @Override
       public void showMask(int mPiercedX, int mPiercedY, int mWidth, int 
       mHeight) {
       if (maskView.getVisibility() != View.VISIBLE) {
        maskView.setVisibility(View.VISIBLE);
        }
        }
    

    它仍然有用!!!!

    2)getView()

      private void maskByBigView(int position, View view, int section) {
      if (selectedPosition != DEFAULT_SELECTED_POSITION) {  
      if (selectedPosition == position) {
          maskViewListener.showMask(0,(int)view.getY(),200,200);            
         }
      }
    
      @Override
      public void showMask(int mPiercedX, int mPiercedY, int mWidth, int 
    

    mHeight){       if(maskView.getVisibility()!= View.VISIBLE){         maskView.setVisibility(View.VISIBLE);        }        }

    它发生了我上面告诉你的有线事! 如果我将maskView设置为不可见而不是消失,那就可以了!!

  3. 那么为什么只有它不能在适配器的getView()中工作,并且在我将maskView设置为不可见而不是消失之后它才能工作。 以及为什么如果其他情况可以忽略maskView不可见或消失。

2 个答案:

答案 0 :(得分:0)

嘿,因为我能够理解您的制作视图,但您的适配器不了解它,所以在使视图可见后调用adapter.notifiyDataStateChanged();

答案 1 :(得分:0)

我认为你没有为它设置maskView的高度和宽度。

在Listview中,当maskView消失时,maskView的高度/宽度可以设置为0,而不可见时,它总是设置为高度和宽度。

现在,我认为你应该设置maskView的宽度和高度并使它消失。