Android:如何在创建列表时禁用列表项

2022-09-02 02:31:22

我对Android开发很陌生,并且仍在做很多事情。

我有一个使用以下代码显示的主菜单,但无法确定如何禁用菜单中的选定项。任何人都可以帮我一些示例代码吗?

public class listTest extends ListActivity {

    @Override
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        setListAdapter(ArrayAdapter.createFromResource(this, R.array.mainMenu,
                android.R.layout.simple_list_item_1)); 
        //not sure how to disable list items here
    }

    protected void onListItemClick(ListView list, View view, int position, long id) {
        // can disable items when they are clicked on
        view.setEnabled(false);
    }   

}

我和我的字符串中有一个.xml文件:string-array

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="mainMenu">
        <item>Item 1</item>
        <item>Item 2</item>
        <item>Item 3</item>
    </string-array> 
</resources>

谢谢


答案 1

要在创建列表时禁用列表项,您必须从 中子类化。您必须重写以下方法:和 。在以前,您返回或依赖于列表项在给定位置启用与否。在后面,你返回.ArrayAdapterisEnabled(int position)areAllItemsEnabled()truefalsefalse

如果要使用,则还必须实现该方法,因为仍然实例化而不是您自己的适配器。createFromResource()ArrayAdapter.createFromResource()ArrayAdapter

最后,代码将如下所示:

class MenuAdapter extends ArrayAdapter<CharSequence> {

    public MenuAdapter(
            Context context, int textViewResId, CharSequence[] strings) {
        super(context, textViewResId, strings);
    }

    public static MenuAdapter createFromResource(
            Context context, int textArrayResId, int textViewResId) {

        Resources      resources = context.getResources();
        CharSequence[] strings   = resources.getTextArray(textArrayResId);

        return new MenuAdapter(context, textViewResId, strings);
    }

    public boolean areAllItemsEnabled() {
        return false;
    }

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

答案 2

我相信列表项是否启用是该项状态的一部分,因此我想您必须在.对适配器进行子类化时,可以覆盖 。对于您在此处返回 true 的任何位置,ListView 会将此项标记为已禁用。ListAdapterisEnabled(position)

所以你想做的是这样的:

class MenuAdapter extends ArrayAdapter<String> {

    public boolean isEnabled(int position) {
       // return false if position == positionYouWantToDisable
    }

}

例如,如果您希望能够使用 setter 启用/禁用项目,这可能需要管理每个项目的启用状态。Map

然后在 ListView 上设置自定义适配器。