Mar*_*tyn 19 java android listview list
我是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);
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
谢谢
Vik*_*šan 43
为了禁用列表创建上的列表项,您必须从中进行子类化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
}
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*ias 11
我相信列表项是否启用是该项目状态的一部分,所以我想你必须在你的项目中管理它ListAdapter.子类化适配器时,您可以覆盖isEnabled(position).对于您在此处返回的任何位置,ListView会将此项目标记为已禁用.
所以你想要做的是这样的:
class MenuAdapter extends ArrayAdapter<String> {
public boolean isEnabled(int position) {
// return false if position == positionYouWantToDisable
}
}
Run Code Online (Sandbox Code Playgroud)
Map如果您希望能够使用setter启用/禁用项目,这可能需要例如管理每个项目的启用状态.
然后在ListView上设置自定义适配器.
您可以通过调用两者来禁用列表项(=使其不响应触摸)
setClickable(false)
Run Code Online (Sandbox Code Playgroud)
和
setFocusable(false)
Run Code Online (Sandbox Code Playgroud)
例如,在您的适配器中.
但是,默认情况下,这不会以图形方式自动反映出来.
我目前在列表中使用它的列表项不可点击但大多数包含可点击的小部件.效果很好.
这样,列表项通常包括分隔符(参见Janusz对上面接受的答案的回复).
| 归档时间: |
|
| 查看次数: |
37187 次 |
| 最近记录: |