-1

重複の可能性:
動的 GUI を使用した動的 ListView

sqlite データベースからデータを取得する必要があります。データベースには countryname 、 card name 、 card id および status が含まれます。たとえば、国名を表示してからカードのリストを動的に表示する必要があります。そのため、各項目のチェックボックスを使用して実装する必要があり、ユーザーが米国のカテゴリに表示されているカードをクリックすると、データベースでそのステータスを更新する必要があります。たとえば、米国のカードがチェックされている場合、データベースで更新する必要があります他のカードの「はい」の同様の機能を更新します..では、これをどのように達成するのですか?

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

さて、まず最初に必要なのは、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 に答える
0

したがって、あなたの場合、MultiselectExpandablelistviewを実装する必要があります。

于 2012-09-25T06:13:57.417 に答える