具有动态图形用户界面的动态ListView

时间:2012-09-25 06:06:05

标签: android listview

  

可能重复:
  Dynamic ListView with dynamic GUI

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

3 个答案:

答案 0 :(得分:2)

我认为你在列表的单元格中询问动态列表视图和复选框。

首先,您需要一个适配器来填充您的列表...喜欢这个..

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

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

为列表的单元格创建一个XMl文件。在getview方法中为list的单元组件放置监听器。

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

 }

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

答案 1 :(得分:0)

因此,在您的情况下,您必须实现Multi Select Expandablelistview ..

答案 2 :(得分:0)

好的,首先,您需要为ListView中要膨胀的每一行创建一个xml文件。 所以你有一些国家名称等的textview。但现在要根据金额动态添加动态的“卡片”这个棘手的部分:

在每行的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更改为其他内容来使用相同的方法。