gpt4 book ai didi

java - 尝试使用自定义适配器填充待办事项 ListView 时遇到问题?

转载 作者:行者123 更新时间:2023-11-29 05:05:35 25 4
gpt4 key购买 nike

我希望用户通过可编辑的文本输入数据,并且我想通过定制的 ListView 接收该数据,为此我尝试使用自定义适配器通过 将文本字段添加到我的 ListView 中tostring() 方法我已经将数据从可编辑的 TextView 转换为字符串,我在我的自定义适配器中将该字符串添加到 Arraylist 变量值中,我试图通过 get( 0) 但 Arraylist 未正确填充或数据未正确显示,因为每当我在可编辑文本中键入内容并按下添加按钮时,什么都没有发生,在此之前,我将字符串添加到 Array Adapter 和 ListView 正常填充,我做错了什么?

public class todoFragment extends ListFragment {

private EditText mToDoField;
private Button mAdd;
UsersAdapter mAdapter;

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

public class UsersAdapter extends ArrayAdapter<String> {

public Context context;
public ArrayList<String> values;

public UsersAdapter(Context context, ArrayList<String> values) {
super(context, 0, values);

this.context = context;
this.values = values;
}

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

LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

convertView = LayoutInflater.from(getContext()).inflate(R.layout.todo_list, parent, false);

TextView todoTextView = (TextView) convertView.findViewById(R.id.todo_TextView);

todoTextView.setText(values.get(0));

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<String> todoList = new ArrayList<String>();
mAdapter = new UsersAdapter(getActivity(), todoList);
ListView listViewToDo = (ListView) v.findViewById (android.R.id.list);
listViewToDo.setAdapter(mAdapter);

mToDoField = (EditText) v.findViewById(R.id.todo_editText);

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;
}

mAdapter.values.add(toDo);

mToDoField.setText("");
}
});

return v;
}

最佳答案

首先,你不应该做

todoTextView.setText(values.get(0));

因为这将始终返回 values 列表的第一个元素。你应该做的

todoTextView.setText(values.get(position));

其次,

mAdapter.values.add(toDo);

不太对。它会起作用,但它不是最佳实践。尝试使用类似的东西

mAdapter.add(toDo);

values.add(toDo);

现在将数据添加到列表后,您需要通知适配器数据集已更改。这是由

mAdapter.notifyDataSetChanged();

关于java - 尝试使用自定义适配器填充待办事项 ListView 时遇到问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30489466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com