在listview中添加新项目时,我想要一个带有它的复选框

时间:2017-03-18 19:53:23

标签: android android-studio

在列表视图中添加新项目时,我想要一个左侧的复选框。我已经尝试了很多,但我没有得到确切的结果。这是代码:

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

1 个答案:

答案 0 :(得分:2)

目前,您正在使用默认的ArrayAdapter作为列表视图。尝试使用自定义适配器 - 这将允许您自定义列表视图布局并在左侧添加一个复选框。

这是example

或者,像这样:

  1. 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>
    
  2. 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;
        }
    }
    
  3. 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;
        }
    }
    
  4. 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);
    }