【问题标题】:android: setOnKeyListener issue with fragmentsandroid: 片段的 setOnKeyListener 问题
【发布时间】:2012-12-18 01:57:37
【问题描述】:

更新 ItemEntryFragment.javaToDoActivity.java 包括我最近尝试让这个东西工作,但它没有

我在一个 android 开发班。我们的任务是使用两个片段制作一个简单的待办事项列表。第一个片段是 EditText,第二个片段是 listView。

当用户在编辑文本框中输入一个项目并按回车键时,该字符串将添加到列表视图中。

更新 2 该应用程序现在已成功加载到我的手机上,并且片段看起来与预期一样。但是,当我在 EditText 行中输入文本后按回车键时,永远不会触发 setOnKeyListener。代码段是最新的。

任何建议/指针将不胜感激。

以下是我认为正确的xml文件

main.xml
<?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="vertical" >
<fragment
    android:name="com.todo.ToDoListFragment"
    android:id="@+id/todolistFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<fragment
    android:name="com.todo.ItemEntryFragment"
    android:id="@+id/textboxFragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

_

list_view_fragment.xml
<?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="vertical" > 
<EditText
    android:id="@+id/myEditText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:contentDescription="@string/addItemContentDescription"
    android:hint="@string/addItemHint" />
</LinearLayout>

_

edit_text_fragment.xml
<?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="vertical" >
</LinearLayout>

这是我的 .java 文件

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

public class ItemEntryFragment extends Fragment{    

private ToDoListActivity activity;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.text_entry_box, container, false);    
    final EditText myEditText = (EditText)view.findViewById(R.id.myEditText);

    myEditText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
                if((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || (keyCode == KeyEvent.KEYCODE_ENTER)) {
                    String newItem = myEditText.getText().toString();
                    activity.addItem(newItem);
                    myEditText.setText("");
                    return true;
                }
            return false;
        }
    });
    return view;
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.activity = (ToDoListActivity)activity;
}   
}

_

public class ToDoListFragment extends ListFragment {
//this class is empty because the ListFragment auto adds the ListView
}

这是我的主要 java 文件

import java.util.ArrayList;
import android.app.Activity;
import android.app.FragmentManager;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class ToDoListActivity extends Activity {

private ArrayAdapter<String> aa;
private ArrayList<String> todoItems;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //inflate view
    setContentView(R.layout.activity_to_do_list);

    //get references to fragments
    FragmentManager fm = getFragmentManager();

    ToDoListFragment todoListFragment = (ToDoListFragment) fm.findFragmentById(R.id.todolistFragment);

    todoItems = new ArrayList<String>();

    //create array adaptor to bind array to list view
    aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, todoItems);

    //bind array adapter to list view
    todoListFragment.setListAdapter(aa);
}   

public void addItem(String newItem){
    todoItems.add(newItem);
    aa.notifyDataSetChanged();
}
}

【问题讨论】:

  • 当您说:“setOnKeyListener 从未被触发”时,您是否在 setOnKeyListener 处设置了断点并调试了应用程序?
  • 是的,当我按下回车键时它永远不会到达那个断点

标签: android android-fragments


【解决方案1】:

也许尝试挂钩 onEditorAction 并设置 EditText 属性,如提到的here

【讨论】:

  • 您链接中的人使用的解决方法对我有用。所以现在当我按下回车键时,字符串会从列表中添加。但是该列表位于 UI 上 EditText 行的顶部。当我在main.xml 中切换片段时,它不会加载 UI
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多