Android 在ListFragment中时,EditText视图未保持焦点
当我点击ListFragment中的EditText(请参见下面的“Your answer here…”字段为屏幕上限)时,它不会保持焦点,这使得它无法使用。文本光标一出现在EditText字段上,它就会迅速消失,EditText字段会失去焦点 我发现了一些相关的堆栈帖子,并怀疑有什么东西可能从EditText中窃取了焦点。见相关帖子。我也读过一些关于的帖子,但没有任何意义 我可以通过编程方式构建视图,但是使用标准ListFragment和ArrayAdapter代码要容易得多。该列表将随着用户的输入而增加,并且通过Android提供的基础设施更易于管理 请看下面的屏幕。屏幕右侧是一个ListFragment,其中包含行的自定义布局。每行包含一个EditText和一个用于提交文本的按钮 以下是ListFragment的代码:Android 在ListFragment中时,EditText视图未保持焦点,android,android-layout,Android,Android Layout,当我点击ListFragment中的EditText(请参见下面的“Your answer here…”字段为屏幕上限)时,它不会保持焦点,这使得它无法使用。文本光标一出现在EditText字段上,它就会迅速消失,EditText字段会失去焦点 我发现了一些相关的堆栈帖子,并怀疑有什么东西可能从EditText中窃取了焦点。见相关帖子。我也读过一些关于的帖子,但没有任何意义 我可以通过编程方式构建视图,但是使用标准ListFragment和ArrayAdapter代码要容易得多。该列表将随着用户
public class ItemDetailFragment extends ListFragment {
/**
* The fragment argument representing the item ID that this fragment
* represents.
*/
public static final String ARG_ITEM_ID = "item_id";
private static final String STATE_ACTIVATED_POSITION = "activated_position";
/**
* The dummy content this fragment is presenting.
*/
private static DetailArrayAdapter mAdapter;
/**
* Mandatory empty constructor for the fragment manager to instantiate the
* fragment (e.g. upon screen orientation changes).
*/
public ItemDetailFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<DetailData> items = new ArrayList<DetailData>();
items.add(new DetailData("1"));
mAdapter = new DetailArrayAdapter(getActivity(), R.layout.detail_layout, items);
// TODO: replace with a real list adapter.
setListAdapter(mAdapter);
}
class DetailArrayAdapter extends ArrayAdapter<DetailData> {
Context context = null;
int layoutResourceId;
ArrayList<DetailData> data;
public DetailArrayAdapter(Context context, int layoutResourceId, ArrayList<DetailData> data){
super(context, layoutResourceId, data);
this.context = context;
this.layoutResourceId = layoutResourceId;
this.data = data;
}
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
DetailData data = this.data.get(position);
EditText text = (EditText) row.findViewById(R.id.answer);
text.setText(data.detail_number + "You answer here ...");
Button submit_button = (Button) row.findViewById(R.id.answer_submit);
submit_button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
int count = mAdapter.getCount();
int item_num = count + 1;
DetailData d = new DetailData(""+item_num);
mAdapter.add(d);
}
});
return row;
}
}
class DetailData {
public String detail_number;
public DetailData(String num){
this.detail_number = num;
}
}
}
公共类ItemDetailFragment扩展了ListFragment{
/**
*表示此片段所包含的项ID的片段参数
*代表。
*/
公共静态最终字符串ARG\u ITEM\u ID=“ITEM\u ID”;
私有静态最终字符串状态\u ACTIVATED\u POSITION=“ACTIVATED\u POSITION”;
/**
*此片段呈现的虚拟内容。
*/
专用静态细节阵列适配器;
/**
*片段管理器实例化
*碎片(如屏幕方向改变时)。
*/
公共ItemDetailFragment(){
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ArrayList items=新建ArrayList();
添加(新的详细数据(“1”));
mAdapter=new DetailArrayAdapter(getActivity(),R.layout.detail\u layout,items);
//TODO:替换为真正的列表适配器。
setListAdapter(mAdapter);
}
类DetailArrayAdapter扩展了ArrayAdapter{
Context=null;
国际布局资源;
阵列列表数据;
公共详细信息ArrayAdapter(上下文上下文、int-layoutResourceId、ArrayList数据){
超级(上下文、布局资源ID、数据);
this.context=上下文;
this.layoutResourceId=layoutResourceId;
这个数据=数据;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
DetailData=this.data.get(位置);
EditText text=(EditText)row.findViewById(R.id.answer);
text.setText(data.detail_number+“您在这里回答…”);
按钮提交按钮=(按钮)行。findViewById(R.id.answer\u submit);
submit_button.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
int count=mAdapter.getCount();
int item_num=计数+1;
DetailData d=新的DetailData(“+”项目数量);
mAdapter.添加(d);
}
});
返回行;
}
}
类详细数据{
公共字符串详细信息\u编号;
公共详细信息数据(字符串编号){
this.detail_number=num;
}
}
}
以下是自定义行的布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<EditText
android:id="@+id/answer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Your answer here..."
android:maxLines="1"
android:singleLine="true"/>
<Button
android:id="@+id/answer_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go" />
</LinearLayout>
在创建EditText对象后,将以下行添加到ItemDetailFragment.DetailArrayAdapter.getView()可以修复此问题:
text.requestFocus();
我不明白,但是在检索视图时使用EditText请求焦点可以使屏幕上的EditText(以及其他)聚焦。requestFocus()仅适用于最后添加的EditText,如果listfragment上有多个EditText,则不起作用