【问题标题】:Android setOnKeyListener not working when used in fragmentAndroid setOnKeyListener 在片段中使用时不起作用
【发布时间】:2014-01-10 17:08:58
【问题描述】:

在过去,我已经能够成功设置一个 onKeyListener 来检测用户是否选择了 android 键盘上的返回按钮,然后这会触发并操作以将用户发送到另一个活动,但是我现在需要构建将相同的功能放入片段中,但是当我在片段中使用 setOnKeyListener 时,由于某种原因它不起作用,下面我将发布代码

我的编辑文本

<EditText
                android:id="@+id/searchetedittext"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_margin="2dp"
                android:background="@drawable/vineline_edittext_inner_background"
                android:gravity="top"
                android:hint="Search #Hashtags"
                android:imeOptions="actionSend"
                android:inputType="textCapSentences|textMultiLine|textAutoCorrect|textAutoComplete"
                android:lines="1"
                android:padding="5dp"
                android:textColor="@color/button_color_dark"
                android:textSize="22dp" />

我的 setOnKeyListener

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    View v;

    if (getArguments().getInt(EXTRA_SEARCH_TYPE) == 0) {
        v = inflater.inflate(R.layout.content_of_tab1, container, false);
        lv = (ListView) v.findViewById(R.id.searchtrendlist);
        pb = (ProgressBar) v.findViewById(R.id.progressbartab1);

        final LinearLayout searchButton = (LinearLayout) v
                .findViewById(R.id.searchbutton);

        final EditText searchEdittext = (EditText) v
                .findViewById(R.id.searchetedittext);
        searchEdittext.setTypeface(textStyleThin);

        searchEdittext.setOnKeyListener(new OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    switch (keyCode) {

                    case KeyEvent.KEYCODE_ENTER:
                        searchButton.performClick();
                        return true;
                    default:
                        break;
                    }

                }
                return false;
            }
        });

        searchButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                postText = searchEdittext.getText().toString();

                Intent intent = new Intent(context,
                        HashtagScreenActivity.class);
                intent.putExtra("screenname", postText);
                startActivity(intent);

                searchEdittext.setText("");
            }
        });

        new setupTrends().execute();

    } else {
        v = inflater.inflate(R.layout.content_of_tab2, container, false);
        lv = (ListView) v.findViewById(R.id.searchfriendlist);
        pb = (ProgressBar) v.findViewById(R.id.progressbartab2);

        final LinearLayout searchFriendButton = (LinearLayout) v
                .findViewById(R.id.searchfriendbutton);

        final EditText searchFriendEdittext = (EditText) v
                .findViewById(R.id.searchfriendedittext);
        searchFriendEdittext.setTypeface(textStyleThin);

        searchFriendEdittext.setOnKeyListener(new OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    switch (keyCode) {

                    case KeyEvent.KEYCODE_ENTER:
                        searchFriendButton.performClick();
                        return true;
                    default:
                        break;
                    }

                }
                return false;
            }
        });

        searchFriendEdittext.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable text) {
            }

            public void beforeTextChanged(CharSequence s, int start,
                    int count, int after) {
            }

            public void onTextChanged(CharSequence s, int start,
                    int before, int count) {

                try {
                    fdb.open();

                    if (s.toString().matches("")) {
                        friendListItems = fdb.getFriends();
                    } else {
                        friendListItems = fdb.sortFriends(s.toString());
                    }

                    userListsAdapter = new SearchFriendsAdapter(
                            getActivity(), friendListItems);

                    lv.setAdapter(userListsAdapter);

                    fdb.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                searchFriendEdittext.requestFocus();

            }
        });

        searchFriendButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                postFriendText = searchFriendEdittext.getText().toString();

                if (postFriendText.length() > 0) {
                    Intent intent = new Intent(getActivity(),
                            FriendProfileActivity.class);
                    intent.putExtra("screenname", postFriendText);
                    startActivity(intent);

                    searchFriendEdittext.setText("");
                } else {
                    Toast.makeText(getActivity(),
                            "Please enter a twitter username",
                            Toast.LENGTH_LONG).show();
                }

            }
        });

        fdb.open();

        friendListItems = fdb.getFriends();

        userListsAdapter = new SearchFriendsAdapter(getActivity(),
                friendListItems);

        lv.setAdapter(userListsAdapter);

        fdb.close();

        pb.setVisibility(View.GONE);
    }

    addHeader();

    return v;
}

【问题讨论】:

  • 你能告诉我们你在哪里设置这个监听器吗?我的意思是在哪个回调中
  • 它在fragment类的onCreateView中
  • 您是否检查过 onKey() 方法是否正在被调用?也许 searchFriendButton.performClick() 是问题
  • 原来 onKey 根本没有被调用,我将不得不尝试弄清楚为什么片段中没有发生这种情况

标签: android android-fragments android-edittext android-keypad


【解决方案1】:

这是一个老问题,但是当我设置edittext的输入类型android:inputType="textPersonName"时我得到了答案

【讨论】:

  • 这个答案很古老,但它帮助了我。我的 EditText 视图上缺少 inputType。试图将 onKeyListener 放在对话框片段中的 EditText 视图上。谢谢!我添加了 android:inputType="textCapSentences" 并且它立即工作所以只要你指定一个输入类型似乎并不重要。
猜你喜欢
  • 1970-01-01
  • 2013-07-06
  • 2016-03-14
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2015-03-10
相关资源
最近更新 更多