我想创建一个用户输入艺术家姓名的布局,当他按下虚拟键盘上的搜索时,会显示艺术家列表。
View rootView = (View) inflater.inflate(R.layout.fragment_search, container, false);
EditText searchArtist = (EditText) rootView.findViewById(R.id.searchArtist);
searchArtist.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
makeToast();
return true;
}
return false;
}
});
这是我的xml
<EditText
android:id="@+id/searchArtist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/search_artist"
android:imeOptions="actionSearch"
android:inputType="text">
<requestFocus />
我在其他stackoverflow帖子中搜索了很多关于这一点,但没有一个解决方案似乎有效。
MinSDK 21,测试nexus 6,compileSdkVersion 22,buildToolsVersion&#39; 22.0.1&#39;。
另请注意,searchArtist(edittext)位于片段内。
更多上下文:侦听器代码位于onCreateView方法中。
答案 0 :(得分:2)
我在Android 5.1.1上测试过类似的代码。有用。 我建议插入一条日志消息来检查是否正在调用onEditorAction:
var chartLegend = "<ul style=\"list-style-type: none;\">";
for(var i = 0; i < chartDatas.datasets.length; i++)
{
chartLegend += "<li><div style=\"background-color:" + chartDatas.datasets[i].pointColor + ";height:20px; width:20px; float:left; margin:5px;\"></div>" + chartDatas.datasets[i].label + "</li>"
}
chartLegend += "</ul>";
这样,您可以确保实际调用该方法。 EditorInfo.IME_ACTION_SEARCH是常数:3
我假设makeToast();是你创建的方法,对吗?
为了添加更多信息,我在片段中测试了您的代码。所以,我真的不相信问题是你的代码被插入的地方。您只需要确保在需要使用它之前设置了侦听器。 希望这可以帮到你
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.v("TAG", "onEditorAction(): " + actionId);
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
Log.v("TAG", "onEditorAction(): entered");
...
我的xml:
public class MainFragment extends Fragment {
....
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// view is a reference to whole fragment layout (where searchArtist is inserted)
View view = inflater.inflate(R.layout.fragment, null);
// Find searchArtist (There's only one @id/searchArtist inside View)
EditText searchArtist = (EditText)view.findViewById(R.id.searchArtist);
searchArtist.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
Log.v("TEMP", "I'm being clicked " + actionId);
return true;
}
return false;
}
});
return view;
}// End of onCreateView
} // End of Fragment
答案 1 :(得分:1)
尝试所有解决方案后,包括setOnKeyListener和textChangeListener。最终的解决方案是删除项目并从头开始。我想环境存在问题。
我非常喜欢Android Studio,但有时这些错误让我感到震惊。
答案 2 :(得分:0)
答案 3 :(得分:0)
我有同样的问题: OnEditorActionListener和onKeyListener都没有工作。
但是TextChangeListener解决方案可以解决问题。对我来说。
片段:
protected void onCreate(Bundle savedInstanceState){
...
someField = (EditText) this.findViewById(R.id.some_field);
someField.addTextChangeListener(someListener);
...
}