禁用单击ListView的项目

时间:2014-02-22 11:28:52

标签: java android eclipse listview android-listview

我正在使用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...   
         }
    });

3 个答案:

答案 0 :(得分:2)

这样做。

定义一个布尔变量

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;
}
};

答案 1 :(得分:1)

您必须扩展简单适配器,维护已单击的索引列表,实现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)

我读过你想要在点击后禁用一行。如果您只想禁用最后一次单击的行,则可以存储单击的最后一个索引。

答案 2 :(得分:1)

我使用了以下代码并解决了我的问题。它非常简单容易。无需使用任何额外代码。
我做的是我已经把条件检查位置,然后根据它,我禁用了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;
                }
            });