ListView Android中的EditText和按钮
Posted
技术标签:
【中文标题】ListView Android中的EditText和按钮【英文标题】:EditText And Buttons in ListView Android 【发布时间】:2014-08-10 19:35:51 【问题描述】:我创建了自定义ListView
,它有两个TextViews
、两个Buttons
和一个EditText
,
我的问题是:
1) 编辑文本即使在添加后也会失去控制 android:descendantFocusability="beforeDescendants"
到根布局和 beforeDescendants 块的 onItemClick 和 onClick 按钮
2) 如果我在根布局中添加android:descendantFocusability="BlocksDescendants"
,则列表的 onItemClick 和按钮的 onClick 开始工作,但 EditText 变得不可触摸,即使在触摸 edittext 键盘后也不显示。
有人可以指导我吗?
我的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:descendantFocusability="beforeDescendants"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_separator"
android:layout_
android:layout_
android:background="@color/dark_grey"
android:paddingLeft="15dp"
android:text="TextView"
android:textStyle="bold" />
<LinearLayout
android:layout_
android:layout_
android:background="@color/lighter_gray"
android:paddingLeft="15dp" >
<LinearLayout
android:layout_
android:layout_
android:layout_weight="0.5"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_detail_1"
android:layout_
android:layout_
android:text="TextView" />
<TextView
android:id="@+id/tv_detail_2"
android:layout_
android:layout_
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:layout_weight="0.5"
android:paddingBottom="5dp"
android:paddingRight="10dp"
android:paddingTop="5dp" >
<ImageButton
android:id="@+id/btn_left"
android:layout_
android:layout_
android:layout_gravity="center"
android:focusable="true"
android:focusableInTouchMode="true"
android:padding="1dp"
android:src="@drawable/right_arrow" />
<EditText
android:id="@+id/editText1"
android:layout_
android:layout_
android:layout_gravity="center"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:background="@drawable/edittext_background"
android:enabled="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:inputType="textPersonName" >
</EditText>
<ImageButton
android:id="@+id/btn_right"
android:layout_
android:layout_
android:layout_gravity="center"
android:focusable="true"
android:focusableInTouchMode="true"
android:padding="1dp"
android:src="@drawable/left_arrow" />
</LinearLayout>
</LinearLayout>
【问题讨论】:
使用您尝试过的代码更容易理解问题。 你无法专注于edittext 使用这个属性android:focusableInTouchMode="true" 尝试将这个:android:descendantFocusability="beforeDescendants" 替换成这个:android:focusable="false", android:focusableInTouchMode="false" Haresh 我已经尝试过了,但是发生了什么是 EditText 被点击了,但我输入的任何内容都没有反映在 EditText 中它失去控制 【参考方案1】:我建议尝试为此实现自定义列表视图,我们创建一个适配器,我们将在其中创建两个布局
布局1)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_ >
<ListView
android:id="@+id/listView1"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
布局2)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_ >
<TextView
android:id="@+id/textView1"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="16dp"
android:text="TextView" />
<EditText
android:id="@+id/editText1"
android:layout_
android:layout_
android:layout_alignBottom="@+id/textView2"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_toRightOf="@+id/textView1"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button2"
android:layout_
android:layout_
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_alignParentRight="true"
android:text="Button" />
<Button
android:id="@+id/button1"
android:layout_
android:layout_
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"
android:layout_marginTop="29dp"
android:text="Button" />
</RelativeLayout>
并在 .java 类中为 listview 创建一个自定义适配器 测试.java)
public class Testttt extends Activity
ListView listView;
CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.direction);
findId();
executionMethod();
private void findId()
listView = (ListView) findViewById(R.id.listView1);
adapter = new CustomAdapter(this);
private void executionMethod()
listView.setAdapter(adapter);
class CustomAdapter extends BaseAdapter
public CustomAdapter(Context convertView)
@Override
public int getCount()
return 0;
@Override
public Object getItem(int position)
return null;
@Override
public long getItemId(int position)
// TODO Auto-generated method stub
return 0;
@Override
public View getView(int position, View convertView, ViewGroup parent)
LayoutInflater inflater = LayoutInflater
.from(getApplicationContext());
View view = inflater.inflate(R.layout.qwerty, null);
Button btn1 = (Button) view.findViewById(R.id.button1);
Button btn2 = (Button) view.findViewById(R.id.button2);
EditText edt = (EditText) view.findViewById(R.id.editText1);
return view;
需要注意的是,在 customadapter 类中,您可以根据您的要求在特定项目中设置功能
【讨论】:
【参考方案2】:在您的清单文件中添加android:windowSoftInputMode="stateHidden|adjustPan"
在您已创建列表视图的活动标签下
【讨论】:
以上是关于ListView Android中的EditText和按钮的主要内容,如果未能解决你的问题,请参考以下文章
Android中EditTex焦点设置和弹不弹出输入法的问题
android 中的appwidget中加了listview,怎么让点击listview中的item后跳转到app主页面