Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在ListFragment中时,EditText视图未保持焦点_Android_Android Layout - Fatal编程技术网

Android 在ListFragment中时,EditText视图未保持焦点

Android 在ListFragment中时,EditText视图未保持焦点,android,android-layout,Android,Android Layout,当我点击ListFragment中的EditText(请参见下面的“Your answer here…”字段为屏幕上限)时,它不会保持焦点,这使得它无法使用。文本光标一出现在EditText字段上,它就会迅速消失,EditText字段会失去焦点 我发现了一些相关的堆栈帖子,并怀疑有什么东西可能从EditText中窃取了焦点。见相关帖子。我也读过一些关于的帖子,但没有任何意义 我可以通过编程方式构建视图,但是使用标准ListFragment和ArrayAdapter代码要容易得多。该列表将随着用户

当我点击ListFragment中的EditText(请参见下面的“Your answer here…”字段为屏幕上限)时,它不会保持焦点,这使得它无法使用。文本光标一出现在EditText字段上,它就会迅速消失,EditText字段会失去焦点

我发现了一些相关的堆栈帖子,并怀疑有什么东西可能从EditText中窃取了焦点。见相关帖子。我也读过一些关于的帖子,但没有任何意义

我可以通过编程方式构建视图,但是使用标准ListFragment和ArrayAdapter代码要容易得多。该列表将随着用户的输入而增加,并且通过Android提供的基础设施更易于管理

请看下面的屏幕。屏幕右侧是一个ListFragment,其中包含行的自定义布局。每行包含一个EditText和一个用于提交文本的按钮

以下是ListFragment的代码:

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,则不起作用