到目前为止,我已经花了大约6个小时的时间,除了路障之外什么都没打.一般的前提是a中有一些行ListView(无论是由适配器生成,还是作为标题视图添加)包含一个EditText小部件和一个Button.我想要做的就是能够使用jogball /箭头,将选择器导航到正常的单个项目,但是当我到达特定行时 - 即使我必须明确地识别行 - 它具有可聚焦孩子,我希望那个孩子采取焦点而不是用选择器指示位置.
我已经尝试了很多可能性,到目前为止还没有运气.
布局:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
Run Code Online (Sandbox Code Playgroud)
标题视图:
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
Run Code Online (Sandbox Code Playgroud)
假设适配器中还有其他项目,使用箭头键将按预期在列表中上/下移动选择; 但是当到达标题行时,它也会与选择器一起显示,并且无法专注于EditText使用jogball.注意:点击它EditText 会将焦点集中在那一点,但是它依赖于触摸屏,这不是必需的.
ListView在这方面显然有两种模式:
1 setItemsCanFocus(true).:从不显示选择器,但EditText使用箭头时可以获得焦点.焦点搜索算法难以预测,并且没有选择哪个项目的视觉反馈(在任何行上:具有可聚焦儿童或不具有可聚焦儿童),这两者都可以给用户带来意想不到的体验.
2 setItemsCanFocus(false).:选择器始终以非触摸模式绘制,并且EditText永远无法获得焦点 - 即使您点击它也是如此.
更糟糕的是,调用editTextView.requestFocus()返回true,但事实上并没有给EditText带来焦点.
我想象的基本上是1和2的混合,而不是列表设置,如果所有项目都是可聚焦的,我想为列表中的单个项目设置可聚焦性,以便选择器从选择无缝转换不可聚焦项目的整行,以及遍历包含可聚焦子项的项目的焦点树.
任何接受者?
我想实现一个ListView,我可以用我的光标没问题.现在,根据您点击它的哪一行,您将根据在该行上按下的信息(就像它应该按照预期一样)进入新活动.我想有一个按钮来删除该行,因此用户可以按行的任何部分来启动新活动,但如果他们按下该行上的按钮,它会删除该行(或启动删除活动/功能).
如果你能看到@ DroidRecord,它们的布局与我期待的相似.
谢谢!
克里斯.

单击更多图标(固定在列表项右侧的3个垂直点)将打开Google音乐中的上下文菜单:

我正在尝试使用我猜测的上下文菜单来重新创建它.文件说:
如果您的活动使用ListView或GridView并且您希望每个项目都提供相同的上下文菜单,请通过将ListView或GridView传递给registerForContextMenu()来注册上下文菜单的所有项目.
但我仍然希望列表项本身可以点击.我只想在用户点击更多图标时显示上下文菜单,就像在Google音乐中一样.
所以我尝试了这个:
@Override
public void onMoreClicked(ArtistsListItem item, int position, View imageButton) {
registerForContextMenu(imageButton);
}
Run Code Online (Sandbox Code Playgroud)
onMoreClicked只是我从列表的适配器接收onClick回调的自定义侦听器的一部分.
调用registerForContextMenu,但从不调用片段的onCreateContextMenu方法:
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { //this method is never called
super.onCreateContextMenu(menu, view, info);
android.view.MenuInflater inflater = mActivity.getMenuInflater();
inflater.inflate(R.menu.artist_list_menu, menu);
}
Run Code Online (Sandbox Code Playgroud)
我运行了一些断点来检查它是否正在运行,但它从未这样做过.我对活动的onCreateContextMenu做了同样的事情(registerForContextMenu的类是片段,但只是为了确保我这样做)并且也没有骰子.
我正在使用ActionBarSherlock,我不知道这是否有所作为,但我想这值得注意.
有谁知道这里发生了什么?
我有以下非常简单的使用ListView的测试程序.我创建一个ListView并将其设置为内容视图.我设置了一个提供行的ListAdapter.有30行,每行包含一个LinearLayout ViewGroup.在ViewGroup中,我放置了一个TextView和一个Button.当我运行程序时,我发现我无法选择列表的行.但是,我可以滚动列表并单击按钮.
如果我从LinearLayout中删除该按钮(以便它只包含TextView),那么我可以选择列表的行.我希望能够在我的各个行视图上有按钮,并且仍然可以选择列表的行.在另一个论坛上,有人说这是可能的,但我不知道如何实现它.
任何人都可以给我一个线索吗?
谢谢.
public class ListViewTest extends Activity implements ListAdapter
{
int m_count;
DataSetObserver m_observer;
public ListViewTest()
{
m_count = 30;
m_observer = null;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ListView lv = new ListView(this);
lv.setAdapter(this);
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
setContentView(lv);
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int position) {
return true;
}
@Override
public int getCount()
{
return m_count;
}
@Override
public Object …Run Code Online (Sandbox Code Playgroud) 这个问题的答案可能非常明显,但令我头疼.我有一个简单的LinearLayout,里面有一个ListView.我这样做:onCreate
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.friends);
ListView listView = (ListView) findViewById(R.id.friend_list);
listAdapter = new CheckinListAdapter(checkins, listView, R.layout.checkin_list_item);
listView.setAdapter(listAdapter);
if (getLastNonConfigurationInstance() != null) {
FriendsActivity last = (FriendsActivity) getLastNonConfigurationInstance();
this.checkins.addAll(last.checkins);
this.sort = last.sort;
} else {
refresh();
}
registerForContextMenu(listView);
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因onCreateContextMenu永远不会被召唤!所以我做了一些研究,因为我在寄存器后加载列表,也许它没有正确注册.如果我进入我的ListAdapter行为registerForContextMenu确实会出现.但它与键盘的行为不正确.所以我现在对可能出现的错误感到困惑,因为我必须注册每个子项似乎有点不直观.我在网上找到的所有例子都在使用ArrayAdapter.:(
有什么建议?
编辑
这里有更多细节,以防我看不到的事情:
我的XML文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:text="@string/check_in"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="onCheckInClicked"/>
<ListView android:id="@+id/friend_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
列表项xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" …Run Code Online (Sandbox Code Playgroud)