在Android Studio中为每个孩子添加带有EditText的ListView,可以通过自定义适配器来实现。以下是一个完整的示例代码:
首先,在XML布局文件中定义ListView和EditText的外部布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/addButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add Child"/>
</LinearLayout>
接下来,创建一个自定义适配器类来管理ListView中的数据和视图:
public class CustomAdapter extends BaseAdapter {
private List<String> data;
private LayoutInflater inflater;
public CustomAdapter(Context context, List<String> data) {
this.data = data;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item, parent, false);
holder = new ViewHolder();
holder.editText = convertView.findViewById(R.id.editText);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.editText.setText(data.get(position));
holder.editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
data.set(position, s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
return convertView;
}
private static class ViewHolder {
EditText editText;
}
}
在MainActivity中,设置ListView和按钮的点击事件:
public class MainActivity extends AppCompatActivity {
private ListView listView;
private Button addButton;
private CustomAdapter adapter;
private List<String> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
addButton = findViewById(R.id.addButton);
data = new ArrayList<>();
adapter = new CustomAdapter(this, data);
listView.setAdapter(adapter);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
data.add("");
adapter.notifyDataSetChanged();
}
});
}
}
这样,每次点击按钮时,都会在ListView中添加一个带有EditText的子项。用户可以在EditText中输入文本,并且该文本会保存在适配器的数据列表中。
请注意,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。在实际开发中,你可能需要添加删除子项的功能,以及处理EditText的文本变化事件等。
领取专属 10元无门槛券
手把手带您无忧上云