当前位置: 首页 > 知识库问答 >
问题:

当在ListFragment中时,编辑文本视图不保持焦点

席宜修
2023-03-14

当我点击ListFragment中的EditText(请参见“您的答案…”字段是下面的屏幕上限)时,它不会保持焦点,因此无法使用。文本光标一出现在EditText字段上,它就会迅速消失,EditText域就会失去焦点。

我发现了一些相关的堆栈帖子,并怀疑有什么东西可能从EditText中窃取了焦点。请参阅此处的相关帖子。我也读过关于强迫聚焦的帖子,但没有什么意义。

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

请看下面我的屏幕。屏幕的右侧是一个ListFraank,其中包含行的自定义布局。每行都包含一个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;
        }
    }
}

以下是自定义行的布局代码:

<?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>

共有2个答案

应俊爽
2023-03-14

requestFocus()只对最后添加的edittext起作用,如果listfragment上有几个edittext,它不起作用

甄煜
2023-03-14

将以下行添加到ItemDetailFragment。创建EditText对象后,DetailArrayAdapter.getView()修复了该问题:

text.requestFocus();

我不明白这一点,但是在检索视图时让EditText请求获得焦点可以使屏幕上的EditText(以及其他内容)获得焦点。

 类似资料:
  • 我在我的文件中有这个代码,但是当在编辑文本中键入任何值并按下按钮时,相关的字符串不会打印。如何使其在按下按钮时,根据在编辑文本槽中输入的字符串显示特定文本?

  • 我想将文本从软键盘输入到popupwindow中的Edittext小部件,但我遇到了一些问题。我的活动是一个游戏卡桌,并在上面启用一些动画。在游戏表中,有一些按钮。如果玩家点击某个按钮,将显示一个弹出窗口。问题是播放器无法在弹出窗口中输入文本到Edittext。我发现了一些类似的问题,最流行的建议是: 使用此设置,我可以正常输入Edittext。但是,这将阻止主UI线程并导致停止游戏表中的动画。我

  • 我读了关于如何设置一个对象聚焦的问题,但是我似乎找不到任何一个答案来回答我想做的事情。 使用On Focus侦听器,我完成了以下操作: 我尝试了以下帖子中的建议: 我读了这篇文章,但使用这些建议似乎也不起作用:如何在创建和显示布局时设置视图的焦点? 我的目标是,当编辑文本焦点丢失时,如果给定的条目无效,我需要移回它。 此外,根据Bill Mote的建议,我还尝试了: **编辑**我甚至在reque

  • 我有一个片段,其中包含一个ViewPager2的2个fragemnt。在第二个子片段中,我有一个回收器视图,其视图保持器包含 TextView 和 EditText。 在模拟器中,当我点击编辑视图时,软键盘一直关闭。 在真实设备(索尼xperia XA)中,软键盘没有关闭,但它总是关注第一个编辑文本,无论我是否在另一个编辑文本中单击 我曾尝试使用android:WindowsOfInputMode

  • 当EditText具有焦点并且出现软键盘并按下任何键时,我正在尝试清理EditText。我正在使用OnFocus usChangeListener方法来检测EditText何时具有焦点,但我不知道如何在相同的方法中实现键盘事件。 有人能帮我吗?非常感谢。亲切的问候

  • 我有一个编辑文本。我希望这个编辑文本始终保持焦点和可写性。我怎么能每次都不碰它呢?因为条形码扫描器机器将数据连续发送到此应用程序。 我尝试了很多方法。但它们都不起作用。我可以设置键盘是可见的,但光标不在编辑文本上。