Android ListView子视图setEnabled()和setClickable()什么都不做

Axa*_*dax 8 android listview

AsyncTask用户点击我的项目后,我正在做一些工作ListView.我想禁用该项目,因此无法单击两次.我已经简化了点击监听器只包含这个方法,但它仍然没有为我做任何事情,视图看起来是一样的,它让自己再次愉快地点击,这让我非常烦恼.

public void onItemClick(AdapterView<?> parent, View clickedView,
  int position, long id) {
  item = (Episode) parent.getItemAtPosition(position);
  clickedView.setClickable(false);
  clickedView.setEnabled(false);
  clickedView.invalidate();
}
Run Code Online (Sandbox Code Playgroud)

每行的"我的视图"是一个LinearLayout带有两个TextViews 的自定义.

Cri*_*ian 20

所以,您也可能正在使用自定义适配器.如果这样做,请覆盖以下方法:

public boolean areAllItemsEnabled() {
    return false;
}

public boolean isEnabled(int position) {
    // return false if position == position you want to disable
}
Run Code Online (Sandbox Code Playgroud)

然后,当您收到单击时,告诉适配器单击的最后一项是什么,并isEnabled为该位置返回false .例如,您可以在适配器中使用这样的方法:

private int mLastClicked;
public void setLastClicked(int lastClicked){
    mLastClicked = lastClicked;
}
Run Code Online (Sandbox Code Playgroud)


小智 18

如果要禁用项目,请单击列表视图中的使用 clickedView.setClickable(true);

  • 这听起来非常错误,但无论出于何种原因,它都有效.奇怪的是,也许专业人士可以启发我们为什么setClickable(true)实际上具有使视图不可点击的所需效果. (8认同)
  • 我认为这不是一个错误.这样`clickedView`拦截了点击.list元素不响应任何单击,因为`clickedView`拦截它们,因此list元素不会突出显示. (4认同)

Com*_*are 5

你的问题并不完全清楚.我正在解释您的问题,因为您希望onItemClick()不会根据您的电话setEnabled()setClickable()电话进行调用.

我并不感到惊讶,因为onItemClick()ListView不起作用,而不是儿童观.试着重写areAllItemsEnabled()isEnabled()ListAdapter相反.