-1

可能重复:
带动态 GUI 的动态 ListView

我必须从 sqlite 数据库中获取数据。数据库将包含 countryname 、 card name 和 card id 和 status,我必须显示 countryname 然后动态显示卡列表,例如,如果美国有四张卡,那么在列表视图中它将显示 USA 然后是所有四张卡,然后是 UK 然后是 UK 卡和所以它应该用每个项目的复选框来实现,如果用户点击假设一张显示在美国类别中的卡,那么我必须更新它在数据库中的状态,例如如果在美国检查了一张卡,那么在数据库中我们必须为其他卡更新“是”类似的功能..那么如何实现呢?

4

3 回答 3

2

我认为您是在询问动态列表视图,其列表单元格中带有复选框。

首先,您需要一个适配器来填写您的列表...像这样..

 ListView listView=(ListView)findViewById(R.id.listView);
 listView.setAdapter(new MyListAdapter (<Your ArrayList>));

现在,当我们在列表中使用复选框或编辑框时。然后当我们滚动列表时,它每次都会调用它的 getview 方法。所以我们需要管理组件的价值或状态。在这里管理复选框的状态,我使用了布尔类型的 Arraylist。

为列表的单元格制作一个 XML 文件。将列表单元组件的侦听器放在 getview 方法中。

 public class MyListAdapter extends BaseAdapter 
{
 private ArrayList<HashMap<String, String>> data;
 private ArrayList<Boolean> checks=new ArrayList<Boolean>();


  public MyListAdapter ( ArrayList<HashMap<String, String>> d)
    {

    data=d;
    inflater =         (LayoutInflater)baseActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


for (int i = 0; i < d.size(); i++) 
{
        checks.add(i, false);//as first no check box is checked. So fill it with false value

}
}

 public int getCount()
{
    return data.size();
}

public Object getItem(int position)
{
    return position;
}

public long getItemId(int position) 
{
    return position;
}

public View getView(int position, View convertView, ViewGroup parent)
{
View vi=convertView;

    if(convertView==null)

      vi = inflater.inflate(R.layout.list_row, null);

      name = (TextView)vi.findViewById(R.id.name);// name
      checkBox=(CheckBox)vi.findViewById(R.id.check_box);
      email_id = (TextView)vi.findViewById(R.id.e_mail_id); // email ID
      mobile_no = (TextView)vi.findViewById(R.id.mobile_no); // mobile



      checkBox.setTag(Integer.valueOf(position));
      checkBox.setOnClickListener(this);
      checkBox.setChecked(checks.get(position));


    name.setText(<set name form any data source>);
    email_id.setText(<set emailid form any data source>);
    mobile_no.setText(<set mobile form any data source>);


    return vi;
}

 }

希望这对您有所帮助。干杯...

于 2012-09-25T07:04:12.890 回答
0

因此,在您的情况下,您必须实现 Multiselect Expandable listview..

于 2012-09-25T06:13:57.417 回答
0

好的,所以您首先需要为ListView要膨胀的每一行创建一个 xml 文件。因此,您的国家/地区名称等有一些文本视图。但现在棘手的部分是根据数量动态添加这些“卡片”:

在每一行的 xml 中,添加一个LinearLayout您希望指定卡片出现的位置,然后在(您创建的自定义卡片)getView()内部的方法中,ArrayAdapter您需要执行以下操作:

cardsLayout = (LinearLayout) v.findViewById(R.id.cards_layout);
cardsLayout.removeAllViews(); // rows are reused in listview, so this prevent them to be duplicated
ImageView image;
for(int i = 0; i < country.getCards(); i++){ // I assume you're using array for cards of each country
    image = new ImageView(ActivityName.this);
    layoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1.0f);
    image.setLayoutParams(layoutParams);
    image.setImageBitmap(someBitmapImage);
    imageLayout.addView(image);
{

我假设您知道如何创建自己的适配器。这段代码只是动态地创建ImageViews并将其权重设置为 1,因此它们在行中的大小将相等。如果您需要复选框或其他内容,您可以通过将 更改ImageView为其他内容来使用相同的方法。

于 2012-09-25T06:50:57.073 回答