我知道View.Gone
和View.Invisible
之间的区别,我遇到了一个奇怪的情况。我创建了一个包含视图的活动:
listView
maskView
(自定义,没什么特别的,但创建一个位图)(在listView上面)当我点击listView时,我想让maskView可见,但是我发现maskView没有显示我在listView上第二次点击的工具(奇怪的是我打印Log并找到了maskView.getVisibility() == Visible
,但我只是无法在屏幕上看到它!但是当我继续点击时,maskView显示!实际上,它不会在第一时间显示)或设置maskView View.Invisible
而不是View.Gone
那么让我告诉你如何以及何时设置maskView的可见性和响应。
在活动
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)
}
});
他们都在工作!(呃......我不开玩笑,让我们继续)
在适配器
我在我的适配器中创建一个观察者:
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设置为不可见而不是消失,那就可以了!!
那么为什么只有它不能在适配器的getView()
中工作,并且在我将maskView设置为不可见而不是消失之后它才能工作。
以及为什么如果其他情况可以忽略maskView不可见或消失。
答案 0 :(得分:0)
嘿,因为我能够理解您的制作视图,但您的适配器不了解它,所以在使视图可见后调用adapter.notifiyDataStateChanged();
答案 1 :(得分:0)
我认为你没有为它设置maskView的高度和宽度。
在Listview中,当maskView消失时,maskView的高度/宽度可以设置为0,而不可见时,它总是设置为高度和宽度。
现在,我认为你应该设置maskView的宽度和高度并使它消失。