首页 > 解决方案 > 给某个 EditText 焦点

问题描述

我正在使用 2 个 EditText 并排使用,左边的焦点集中在片段启动上,我想给右边的焦点我试图在右边的 EditText 上调用 requestFocus() 但它不起作用

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.sandwich_fragment,container, false);

        sandwichNameEditText = view.findViewById(R.id.sandwich_name_edit_text);
        sandwichPriceEditText = view.findViewById(R.id.sandwich_price_edit_text);
        insertSandwichImageView = view.findViewById(R.id.insert_sandwich_btn);
        sandwichListView = view.findViewById(R.id.sandwich_list);

        dbHandler = new DBHandler(getContext(),null);
        sandwichArrayList = dbHandler.getSandwiches();

        final SandwichListAdapter adpater = new SandwichListAdapter(getContext(),
                R.layout.sandwich_item, sandwichArrayList);

            sandwichListView.setAdapter(adpater);


        insertSandwichImageView.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if(sandwichNameEditText.getText().toString().equals("") || sandwichPriceEditText.getText().toString().equals("")){
                    Toast.makeText(getContext(),"No empty strings.", Toast.LENGTH_SHORT).show();
                    return;
                }
                Sandwich sandwich = new Sandwich(sandwichNameEditText.getText().toString(),
                        Double.parseDouble(sandwichPriceEditText.getText().toString()));
                dbHandler.addSandwich(sandwich);
                adpater.add(sandwich);
                sandwichNameEditText.setText("");
                sandwichPriceEditText.setText("");
                sandwichNameEditText.requestFocus(); // working here

            }
        });
        sandwichNameEditText.requestFocus(); // not working here
        return view;

标签: android

解决方案


尝试调用requestFocusonViewCreated方法。

一旦创建了焦点请求,您就应该这样做View

您可以在此处找到有关 a 之间的区别onCreateViewonViewCreated方法的一些见解。Fragment

也就是说,您也应该在其中移动视图元素的初始化onViewCreated,因为它们是您想要在创建视图之后不是在创建视图时执行的操作。只需将inflate逻辑留在那里,一旦View存在就执行其他逻辑。


推荐阅读