【问题标题】:How to display checkbox on every entry in a listView如何在列表视图中的每个条目上显示复选框
【发布时间】:2016-03-03 00:18:21
【问题描述】:

从此活动中,我从 textField 获取文本并将其显示在 ListView 中。 现在我想在 listView 单元格中的每个条目上添加复选框,并且还想知道如何在单个 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;
    }
}

【问题讨论】:

  • 您需要编写自定义列表视图适配器,而不是数组适配器。查看有关适配器的文档developer.android.com/reference/android/widget/Adapter.html
  • Hi Muhammad Khan as @Ameya Kulkarni 建议您需要编写一个自定义适配器来执行此操作。 Example我想这就是你想要的
  • 在使用自定义视图和适配器(选择框架,使用“完整搜索”字段)androidxref.com/6.0.1_r10/… 时检查源代码是非常宝贵的
  • 在 listview item xml 布局中,您必须在 Adapter 中创建一个复选框列表后插入一个复选框,您将调用并浏览每个复选框并设置 visiblity = true

标签: android listview checkbox


【解决方案1】:

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

您必须执行多项操作才能获得此结果。他们在这里--

  1. 为 ListView 的每个项目创建自定义布局。

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 方法。

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 中设置 Adapter。

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

希望这会有所帮助!

【讨论】:

  • thanx... 但是如何在每个 ListView 条目上添加复选框?
  • 您必须在 XML 中添加复选框,用于定义 ListView 中每个项目的布局。这是我在第一点添加的。请检查我编辑的第一点。
  • DisplayFlightsActivity.this;给出我不明白为什么的错误?
  • 当然!一旦你实现了所有这些,请告诉我。 :)
  • 保留您自己的 Activity 名称,例如 Test.class。我错误地添加了一个不同的名称。现在查看编辑后的代码:)
猜你喜欢
  • 1970-01-01
  • 2013-09-21
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
相关资源
最近更新 更多