如何在listView中的每个条目上显示复选框

时间:2016-03-02 14:57:51

标签: android listview checkbox

从这个Activity我从textField获取文本并将其显示在ListView中。 现在我想在listView Cell中的每个条目上添加复选框,并且还想知道如何在单个ListView单元格中显示多个文本。 帮助代码将不胜感激。 这是我的代码......

public class AfterRegister extends AppCompatActivity
{
    ListView listView;
    EditText editText;
    Button insertItemButton;
    ArrayList<String> arrayList = new ArrayList<String>();
    ArrayAdapter<String> adapter;
    CheckBox checkBox;

    StoreRegistrationDataBase storeRegistrationDataBase;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_after_register);
        storeRegistrationDataBase = new StoreRegistrationDataBase(this);
        storeRegistrationDataBase = storeRegistrationDataBase.open();

        checkBox = (CheckBox) findViewById(R.id.checkbox);

        insertItemButton = (Button) findViewById(R.id.button4);
        insertItemButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                editText = (EditText) findViewById(R.id.editText2);
                listView = (ListView) findViewById(R.id.listView);
                String getEditTextString = editText.getText().toString();

                if(isAlphaNumeric(getEditTextString))
                {
                    if(!getEditTextString.equals(""))

                    {
                        arrayList.add(getEditTextString);

                        adapter = new ArrayAdapter<String>(getBaseContext(), R.layout.text_view_layout, R.id.achView1, arrayList);
                        listView.setAdapter(adapter);



                        adapter.notifyDataSetChanged();
                        editText.setText("");

                    }
                    else
                    {
                        Toast.makeText(AfterRegister.this, "You can not insert empty field", Toast.LENGTH_SHORT).show();
                    }
                }
                else
                {
                    Toast.makeText(AfterRegister.this, "Remove Space", Toast.LENGTH_SHORT).show();
                }
            }
        });
        listView.setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {

                return false;
            }
        });
    }

    public boolean isAlphaNumeric(String s)
    {
        String pattern= "^[a-zA-Z0-9]*$";
        if(s.matches(pattern))
        {
            return true;
        }
        return false;
    }
}

1 个答案:

答案 0 :(得分:2)

您必须使用BaseAdapter和一些Getter / Setter方法在列表视图的每个项目中添加多个文本/图像/其他UI元素。

您必须实现多项内容才能获得此结果。他们在这里 -

  1. 为ListView的每个项目创建自定义布局。
  2. <强> listview_item_layout.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    
        <TextView
            android:id="@+id/layout_textview1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:layout_marginRight="5dip"
            android:textStyle="bold"/>
    
        <TextView
            android:id="@+id/layout_textview2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:layout_marginLeft="5dip"
            android:textStyle="bold"/>
    
                <CheckBox
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:id="@+id/checkbox"
                android:text="Test"/>
    
    </LinearLayout>
    
    1. 创建自定义类并添加一些Getter / Setter方法。
    2. <强> ListRowItem.java

      public class ListRowItem implements Serializable{
      String carrier,number;
      
      public String getCarrier(){
          return carrier;
      }
      
      public String getNumber(){
          return number;
      }
      
      public void setCarrier(String ba_carrier){
          carrier = ba_carrier;
      }
      
      public void setNumber(String ba_number){
          number = ba_number;
      }
      }
      
      1. 创建自定义类并扩展BaseAdapter类。

        public class MyBaseAdapter extends BaseAdapter {
        
        public Context ba_context;
        public ArrayList<ListRowItem> listitem = new ArrayList<>();
        public LayoutInflater inflater;
        ListRowItem currentlistitem;
        
        public MyBaseAdapter(Context ma_context, ArrayList<ListRowItem> ma_listitem) {
        super();
        this.ba_context = ma_context;
        this.listitem = ma_listitem;
        
        inflater = (LayoutInflater) ba_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        
        @Override
        public int getCount() {
        return this.listitem.size();
        }
        
        @Override
        public Object getItem(int position) {
        return this.listitem.get(position);
        }
        
        @Override
        public long getItemId(int position) {
        return (long) position;
        }
        
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        
        if (convertView == null)
            vi = inflater.inflate(R.layout.listview_item_layout, parent, false);
        
        TextView carrier = (TextView) vi.findViewById(R.id.layout_textview1);
        TextView number = (TextView) vi.findViewById(R.id.layout_textview2);
        
        currentlistitem = listitem.get(position);
        
        String str_carrier = currentlistitem.getCarrier();
        String str_number = currentlistitem.getNumber();
        
        carrier.setText(str_carrier);
        number.setText(str_number);
        
        return vi;
        }
        }
        
      2. 最后,填充您的ArrayList并在MainActivity中设置适配器。

        ArrayList<ListRowItem> listitem = new ArrayList<>();
        Context context = TestActivity.this;
        MyBaseAdapter baseAdapter;
        
        ListRowItem lr = new ListRowItem();
        lr.setNumber(number);
        lr.setCarrier(carrier);
        
        listitem.add(lr);
        
        baseAdapter = new MyBaseAdapter(context,listitem);
        
        setContentView(R.layout.activity_test);
        listView = (ListView) findViewById(R.id.list_view);
        listView.setAdapter(baseAdapter);
        
      3. 希望这会有所帮助!!