Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过可编辑文本视图使用自定义适配器填充自定义待办事项列表?_Java_Android_Listview - Fatal编程技术网

Java 如何通过可编辑文本视图使用自定义适配器填充自定义待办事项列表?

Java 如何通过可编辑文本视图使用自定义适配器填充自定义待办事项列表?,java,android,listview,Java,Android,Listview,我希望用户通过可编辑文本输入数据,我希望通过自定义的listview接收数据,我正试图使用自定义适配器通过tostring()将文本字段添加到我的listview中method我已将可编辑文本视图中的数据转换为字符串,我正在将该字符串添加到自定义适配器中,但我有一个类型不匹配错误,在此之前,我将该字符串添加到基本适配器中,并且listview正常填充,我做错了什么 User.java public class User { public String itemView; public Use

我希望用户通过可编辑文本输入数据,我希望通过自定义的listview接收数据,我正试图使用自定义适配器通过
tostring()将文本字段添加到我的listview中
method我已将可编辑文本视图中的数据转换为字符串,我正在将该字符串添加到自定义适配器中,但我有一个类型不匹配错误,在此之前,我将该字符串添加到基本适配器中,并且listview正常填充,我做错了什么

User.java

public class User {

public String itemView;

public User(String itemView) {
    this.itemView = itemView;
}
todoFragment.java

public class todoFragment extends ListFragment {

private CheckBox mCheckBox;
private TextView mTextView;
private EditText mToDoField;
private Button mAdd;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActivity().setTitle(R.string.todo_title);
}

public class UsersAdapter extends ArrayAdapter<User> {
    public UsersAdapter(Context context, ArrayList<User> users) {
        super(context, 0, users);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        User user = getItem(position);

        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.todo_list, parent, false);
        }
        TextView todoTextView = (TextView) convertView.findViewById(R.id.todo_TextView);

        todoTextView.setText(user.itemView);
        return convertView;
    }
}

@TargetApi(9) // remember this for isEmpty()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_todo, container, false);

    ArrayList<User> todoList = new ArrayList<User>();
    final UsersAdapter adapter = new UsersAdapter(getActivity(), todoList);
    ListView listViewToDo = (ListView) v.findViewById (android.R.id.list);
    listViewToDo.setAdapter(adapter);


    mAdd = (Button)v.findViewById(R.id.add_button);
    mAdd.setOnClickListener(new View.OnClickListener() {
        @Override
            public void onClick(View view) {

                String toDo = mToDoField.getText().toString().trim();

            if (toDo.isEmpty()){
                return;
            }

            adapter.add(toDo); // type mismatch error here
            mToDoField.setText("");
        }
    });

    return v;
}
公共类todoFragment扩展了ListFragment{
专用复选框mCheckBox;
私有文本视图mTextView;
私有编辑文本字段;
私人按钮;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getActivity().setTitle(R.string.todo_title);
}
公共类UsersAdapter扩展了ArrayAdapter{
公共用户适配器(上下文,ArrayList用户){
超级(上下文,0,用户);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
用户=获取项目(位置);
if(convertView==null){
convertView=LayoutInflater.from(getContext()).flate(R.layout.todo_list,parent,false);
}
TextView todoTextView=(TextView)convertView.findViewById(R.id.todo_TextView);
todoTextView.setText(user.itemView);
返回视图;
}
}
@TargetApi(9)//记住这一点
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment_todo,容器,错误);
ArrayList todoList=新的ArrayList();
final UsersAdapter adapter=new UsersAdapter(getActivity(),todoList);
ListView listViewToDo=(ListView)v.findViewById(android.R.id.list);
listViewToDo.setAdapter(适配器);
mAdd=(按钮)v.findviewbyd(R.id.add_按钮);
mAdd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
字符串toDo=mToDoField.getText().toString().trim();
if(toDo.isEmpty()){
返回;
}
adapter.add(toDo);//此处的类型不匹配错误
mToDoField.setText(“”);
}
});
返回v;
}

}

您的变量
toDo
是一个字符串,而您的ArrayAdapter
适配器
的类型是
User
。因此,当您尝试调用
adapter.add()
时,适配器需要一个
User
对象,但您正在传递一个字符串


在我看来,你并不真的知道你到底在做什么。目前为止,代码的结构意味着ArrayAdapter中的每个项都是自己的用户,具有自己的项。您应该做的是使用
ArrayList
创建一个
User
对象来保存他们所有的待办事项。您的ArrayAdapter应该扩展
ArrayAdapter
,您将待办事项列表传递给适配器,而不是用户列表。

您正在向
适配器
对象添加字符串类型,该对象扩展了
用户
类型的
ArrayAdapter
,这就是您得到类型不匹配错误的原因,只需将值
todo
设置为
User
Objet,然后将对象添加到
adapter
。希望这对你有帮助