在列表视图中添加新项目时,我想要一个左侧的复选框。我已经尝试了很多,但我没有得到确切的结果。这是代码:
ListView list;
Button btn, btn1, btn2, btn3;
EditText edt;
CheckBox chk;
TextView txt;
StringBuffer buffer = new StringBuffer();
String[] ListElements = new String[]{
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//find view by ids
list = (ListView) findViewById(R.id.list);
btn = (Button) findViewById(R.id.btn);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
edt = (EditText) findViewById(R.id.edt);
chk = (CheckBox) findViewById(R.id.chk);
txt = (TextView) findViewById(R.id.txt);
final List<String> txt = new ArrayList<String>(Arrays.asList(ListElements));
ArrayList<CheckBox> boxes = new ArrayList<CheckBox>();
final ArrayAdapter<String> adapter = new ArrayAdapter<String>
(MainActivity.this, android.R.layout.simple_list_item_1, txt);
list.setAdapter(adapter);
//final ListView listView = getListView();
list.setItemsCanFocus(false);
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txt.add(edt.getText().toString());
adapter.notifyDataSetChanged();
}
});
}
}
答案 0 :(得分:2)
目前,您正在使用默认的ArrayAdapter作为列表视图。尝试使用自定义适配器 - 这将允许您自定义列表视图布局并在左侧添加一个复选框。
这是example。
或者,像这样:
为layout
行创建ListView
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/holo_blue_light"
android:padding="10dp">
<CheckBox
android:id="@+id/check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:text="Dummy Text"
android:textAllCaps="true"/>
</RelativeLayout>
为ListView
行创建模型类:
public class CheckItem {
private String name;
private boolean isChecked;
public CheckItem(String name, boolean isChecked) {
this.name = name;
this.isChecked = isChecked;
}
public String getName() {
return name;
}
public boolean isChecked() {
return isChecked;
}
}
为adapter
创建ListView
:
public class CheckItemAdapter extends ArrayAdapter<CheckItem> {
private List<CheckItem> dataSet;
public CheckItemAdapter(Context context, int resource, List<CheckItem> dataSet) {
super(context, resource);
this.dataSet = dataSet;
}
@Override
public int getCount() {
return dataSet.size();
}
@Override
public CheckItem getItem(int position) {
return dataSet.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
// Inflate layout
convertView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.adapter, parent, false);
// Setup ViewHolder
holder = new ViewHolder();
holder.checkBox = (CheckBox) convertView.findViewById(R.id.check_box);
holder.textView = (TextView) convertView.findViewById(R.id.text_view);
// Store ViewHolder with this row view
convertView.setTag(holder);
} else {
// Use viewHolder - quicker than calling findViewById() on resource every time
holder = (ViewHolder) convertView.getTag();
}
// Get item from your data set at the current list position
CheckItem checkItem = getItem(position);
if (checkItem != null) {
// Set the views to match the item from your data set
holder.checkBox.setChecked(checkItem.isChecked());
holder.textView.setText(checkItem.getName());
}
return convertView;
}
// ViewHolder acts as a cache for row views
private class ViewHolder {
TextView textView;
CheckBox checkBox;
}
}
在adapter
中将ListView
设为Activity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity_layout);
...
List<CheckItem> checkItems = new ArrayList<>();
// Provide adapter with dummy data for testing
for (int i = 0; i < 50; i++) {
checkItems.add(new CheckItem("Check Item " + (i + 1), i % 2 == 0));
}
CheckItemAdapter adapter = new CheckItemAdapter(this, R.layout.adapter, checkItems);
ListView listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);
}