【发布时间】:2014-08-29 11:36:37
【问题描述】:
在 ListView 中,每行包含 1 个文本视图和 1 个微调器。 微调器工作正常。
如何选择完整的列表行?那么,单击它并执行一些操作?
我尝试了 m_listview.setOnItemClickListener( new OnItemClickListener() { ... 并注册了一个长按/上下文菜单。 单击/长按...这些方法/侦听器永远不会被调用。
通过为按钮添加“android:focusable="false" 和 android:focusableInTouchMode="false"" 解决了类似的问题。 按钮起作用,可以选择列表项(行)。伟大的。 此解决方案不适用于其中包含微调器的列表行。
所以,我用一个按钮替换了微调器,再次添加了“focusable=false”。然后它适用于按钮。将其更改回微调器,不,无法选择行。
根据要求提供代码中最相关的部分:
1 - 行布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/variable_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:text=""
android:focusable="false"
android:focusableInTouchMode="false"
android:textSize="12sp" />
<Spinner
android:id="@+id/variable_use_answer"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:entries="@array/variables_use_answers_short"
android:focusable="false"
android:focusableInTouchMode="false"
android:textSize="12sp" />
etc.
2 - 带有列表和其他文本视图和按钮的片段:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingRight="10dp" >
<ListView
android:id="@+id/variables_list"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_alignParentTop="true"
android:layout_margin="5dp"
android:layout_weight="1"
android:scrollbars="vertical" />
<LinearLayout
android:id="@+id/variables_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:padding="4dp" >
<Button
android:id="@+id/waypoint_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12dp"
android:text="Action A" />
etc.
3 - 适配器代码中最重要的部分:
@Override
public View getView(int position, View concertView, ViewGroup parent) {
View view = null;
if (concertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.waypoint_rowlayout, parent, false);
} else {
view = (LinearLayout) concertView;
}
variableV = (TextView) view.findViewById( R.id.variable_name);
useAnswerV = (Spinner) view.findViewById( R.id.variable_use_answer);
useAnswerV.setOnItemSelectedListener( new OnItemSelectedListener() {
@Override
public void onItemSelected( AdapterView<?> parent, View view, int position, long id) {
System.out.println( "Item: " + parent.getItemAtPosition( position).toString());
}
@Override
public void onNothingSelected(AdapterView<?> parent) { };
});
return view;
}
4 - 片段代码(环绕代码)
onCreateView
...
m_listview = (ListView) rootView.findViewById(R.id.variable_list);
...
adapter = new VariableAdapter( getActivity(), varList);
m_listview.setAdapter( adapter);
m_listview.invalidateViews();
....
m_listview.setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick( AdapterView<?> a, View v, int position, long id) {
// -----> N*E*V*E*R C*O*M*I*N*G H*E*R*E* <-----------
VariableInfo var = (VariableInfo) m_listview.getAdapter().getItem( position);
System.out.println( "Variable clicked on: " + var );
});
【问题讨论】:
-
发布一些代码,以便我们了解问题所在。
标签: android android-listview android-spinner