首页>Program>source

我是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);
    }   
}

而且我有个 string-array 在我的strings.xml文件中:

<?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>

谢谢

最新回答
  • 2021-1-11
    1 #

    要在创建列表时禁用列表项,您必须从 ArrayAdapter继承 .您必须重写以下方法: isEnabled(int position)areAllItemsEnabled() .在以前,您返回 truefalse 取决于是否启用了给定位置的列表项.在后者中,您返回 false

    如果您想使用 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
        }
    }
    

  • 2021-1-11
    2 #

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

    所以您想要做的是这样的:

    class MenuAdapter extends ArrayAdapter<String> {
        public boolean isEnabled(int position) {
           // return false if position == positionYouWantToDisable
        }
    }
    

    这可能需要例如 Map 如果您希望能够使用设置器启用/禁用某项,则管理每一项的启用状态。

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

  • 2021-1-11
    3 #

    您可以通过同时调用两个列表项来禁用列表项(=使它不响应触摸)

    setClickable(false)
    

    setFocusable(false)
    
    例如,在适配器中

    默认情况下,这不会自动以图形方式反映出来。

    我当前正在列表中使用该列表,该列表的列表项不可单击,但大多数包含可单击的小部件.效果很好。

    这样,通常会绘制包括分隔符的列表项(请参阅Janusz对上面接受的答案的答复)。

  • 2021-1-11
    4 #

    或者以简单的方式取消注册和注册 OnItemClickListener 可以是一个更好的主意。

    要注册:

    lstDevice.setOnItemClickListener(context);

    要注销:

    lstDevice.setOnItemClickListener(null);

  • SQL Server仅使用最新值选择不同的行
  • windows下适用于Python 3x的OpenCV