【问题标题】:Disabled click Item of ListViewListView的禁用点击项
【发布时间】:2014-02-22 11:28:51
【问题描述】:

我正在使用SimpleAdapter 绑定ListView。现在,当用户单击项目时,我想从 Click() 事件中禁用该时间。我找到了isEnabled() 的一些教程,但我不明白如何使用它?

请帮我解决这个问题。我正在使用自定义ListView
以下代码禁用ListView

SimpleAdapter adapter = new SimpleAdapter(this, arrlist,
            R.layout.topicwisequestion, new String[] { "option" },
            new int[] { R.id.option }) {

        public boolean areAllItemsEnabled() {
            return ignoreDisabled;
        }

        public boolean isEnabled(int position) {
            if (areAllItemsEnabled()) {
                return true;
            }
            return false;
        }
    };
    lvTWOptions.setAdapter(adapter);

    lvTWOptions.setOnItemClickListener(new OnItemClickListener() {
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              // Code...   
         }
    });

【问题讨论】:

  • 只需评论 onclick 项目,.. 这不是很清楚,您可以将您的教程链接发给我。我会告诉你答案..
  • @Don'tBNegative,查看更新后的帖子。
  • @JeetenParmar,我做到了,感谢您发布您的答案。编码愉快。
  • @InnocentKiller,谢谢。我希望它会帮助其他人。
  • 它肯定会帮助其他人。

标签: java android eclipse listview android-listview


【解决方案1】:

这样做。

定义一个布尔变量

boolean ignoreDisabled = false;

然后在 areAllItemsEnabled:

public boolean areAllItemsEnabled() {
    return ignoreDisabled;
}

然后在isEnabled的开头:

public boolean isEnabled(int position) {
    if (areAllItemsEnabled()) {
        return true;
    }
}

或者第二种方法是在你的适配器类中定义以下代码

private int mLastClicked;
public void setLastClicked(int lastClicked){
    mLastClicked = lastClicked;
}

然后

public boolean areAllItemsEnabled() {
    return false;
}

public boolean isEnabled(int position) {
    // return false if position == position you want to disable
}

使用 isEnabled 方法添加最后一次点击事件的位置。

如需进一步参考,您可以查看link

希望对你有所帮助。

这样做。

ListAdapter adapter = new SimpleCursorAdapter(MyList, Layout, c,
new String[] { "Name", "Score" }, to)
{
public boolean areAllItemsEnabled()
{
return false;
}

public boolean isEnabled(int position)
{
return false;
}
};

【讨论】:

  • 抱歉,您必须在自定义数组适配器类中添加 mu 错误
  • @GoRoS,是的,我从另一个 SO 答案中得到了这个答案,但我正在尝试解决这个用户的问题。
  • @JeetenParmar,您只需在自定义适配器类中设置这两个方法。
  • @JeetenParmar,检查我在问题中编辑的链接。
  • boolean isEnabled(int position) 要求返回值,如果我使用引用,它会设置 return ignoreDisabled;好吗?如果我这样做,则列表视图被禁用。
【解决方案2】:

我使用了以下代码并解决了我的问题。这非常简单易行。无需使用任何额外的代码。
我所做的是我设置了条件来检查位置,然后基于它,我禁用了 Clicked Item。

我的代码:

    int pos;
    SimpleAdapter adapter = new SimpleAdapter(this, arrlist, R.layout.topicwisequestion, new String[] { "option" }, new int[] { R.id.option }) {

                public boolean isEnabled(int position) {
                    if (position != 0) {
                        if (position == pos) {
                            return false;
                        } else {
                            return true;
                        }
                    } else {
                        return true;
                    }
                }
            };

            lvTWOptions.setAdapter(adapter);

            lvTWOptions.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {

                    pos = position;
                }
            });

【讨论】:

    【解决方案3】:

    您必须扩展简单的适配器,维护已单击的索引列表,实现 isEnabled(int) 并检查传递的整数是否在您的列表中。然后,您可以在单击列表项后有选择地禁用它们。

    添加一些代码:

    public class MySimpleAdapter extends SimpleAdapter {
    
        private List<Integer> mDisabledRows;
    
        public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
            super(context, data, resource, from, to);
            mDisabledRows = new ArrayList<Integer>();
        }
    
        public void disableRow(int index) {
            mDisableRows.clear();
            mDisabledRows.add(index);
        }
    
        @Override
        public boolean isEnabled(int index) {
            return !mDisabledRows.contains(index);
        }
    }
    

    从您的 onItemClick 方法中,您可以调用 adapter.disableRow(position)

    我读到了,因为您想在单击某行后将其禁用。如果您只想禁用最后点击的行,您可以只存储最后点击的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 1970-01-01
      相关资源
      最近更新 更多