Я довольно плохо знаком с Android dev и все еще разрабатывающий много вещей.
Я имею показ главного меню с помощью следующего кода, но не могу разработать, как отключить выбранные пункты в меню. Кто-либо может помочь мне с некоторым примером кода?
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);
}
}
и у меня есть a 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>
Спасибо
Чтобы отключить элементы списка при создании списка, необходимо создать подкласс от ArrayAdapter
. Вы должны переопределить следующие методы: isEnabled (int position)
и areAllItemsEnabled ()
. В первом случае вы возвращаете true
или false
в зависимости от того, включен ли элемент списка в данной позиции или нет. В последнем случае вы возвращаете 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
}
}
Я считаю, что то, включен ли элемент списка или нет, является частью состояния этого элемента, поэтому я думаю, вы необходимо управлять этим в вашем ListAdapter
. При создании подкласса адаптера вы можете переопределить isEnabled (position)
. Для любой позиции, которую вы здесь вернете, ListView пометит этот элемент как отключенный.
Итак, вы хотите сделать что-то вроде этого:
class MenuAdapter extends ArrayAdapter<String> {
public boolean isEnabled(int position) {
// return false if position == positionYouWantToDisable
}
}
Для этого, вероятно, потребуется, например, карта
, управляющая включенным состоянием каждого элемента, если вы хотите иметь возможность включать / отключать элемент с помощью установщика.
Затем установите настраиваемый адаптер в свой ListView.