首頁>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>

谢谢

最新回復
  • 5月前
    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
        }
    }
    

  • 5月前
    2 #

    我相信列表項的狀態是否屬於列表項已啟用,所以我想您必须在 ListAdapter中进行管理 .子類化適配器時,可以覆盖 isEnabled(position) .對於您在此處返迴true的任何位置,ListView都会將该專案標記為禁用。

    所以您想要做的是這樣的:

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

    這可能需要例如 Map 如果您希望能够使用設置器啟用/禁用某項,則管理每一項的啟用狀態。

    然後在ListView上設置自定義適配器。

  • 5月前
    3 #

    您可以通過同時呼叫两个列表項来禁用列表項(=使它不响應觸摸)

    setClickable(false)
    

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

    預設情况下,這不会自動以圖形方式反映出来。

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

    這樣,通常会绘製包括分隔符的列表項(請參阅Janusz對上面接受的答案的答複)。

  • 5月前
    4 #

    或者以簡單的方式取消註册和註册 OnItemClickListener 可以是一个更好的主意。

    要註册:

    lstDevice.setOnItemClickListener(context);

    要註销:

    lstDevice.setOnItemClickListener(null);

  • SQL Server仅使用最新值選擇不同的行
  • windows下適用於Python 3x的OpenCV