0

我尝试制作一个使用 viewFlipper 来翻转一些文本的应用程序。内容从光标填充,视图以编程方式添加。

每个视图都基于相同的 xml 布局文件,每个视图包含 2 个按钮。

当我按下一个按钮时,我会触发 onClick 事件,但是如何将自定义变量传递给 onclick 事件?

我有一个 var id女巫,我需要对每个视图都不同,并且我需要在按下按钮时获得这个值。

这是我的代码:

Cursor cur = db.rawQuery(
                "SELECT * FROM items WHERE id_cat = " + id_cat + "", null);

        TextView t = new TextView(this);

        int total_items = cur.getCount();
        if (cur.moveToFirst()) {
            do {
                String data = cur.getString(cur.getColumnIndex("item_text"));
                String item_id= cur.getString(cur.getColumnIndex("_id"));

                int current = cur.getPosition()+1;

                // load xml template
                 LayoutInflater inflater = LayoutInflater.from(this);
                 View v = inflater.inflate(R.layout.item_flip, null, false);
                     ToggleButton btnf=(ToggleButton)v.findViewById(R.id.favorite);
                 btnf.setOnClickListener(new OnClickListener() { 

                        public void onClick(View v) {
                            switch(v.getId()){
                             case R.id.favorit:
                                // switch  favorite
                                SQLiteDatabase db = dbAdapter.openDataBase();
                                if(status==1) {
                       //// HERE I NEED THE ITEM_ID DISTINCT FOR EACH VIEW
                                    db.execSQL("UPDATE items SET favorite = 0 WHERE items._id = " + item_id);

                                 } else {
                                db.execSQL("UPDATE items SET favorite = 1 WHERE items._id = " + item_id);

                                 }

                                System.out.println("Switch");
                                db.close();
                             break;

                            }       
                        }
                      });


                 vf.addView(v);

            } while (cur.moveToNext());

该按钮工作正常,但未传递项目 ID。

如果我的 viewflipper 中有 5 个项目,item_id 将变为 1,然后是 2,然后是 3,然后......然后是 5,并且我按下 item_id 的按钮中没有任何一个将是最后一个视图的 id。

如果您有任何解决方案,请提前致谢。

4

1 回答 1

1

我的天啊,

这是我第三次在这里发布问题,在接下来的 10 分钟内,我自己解决了问题 :)

如果有人需要类似的东西,他就是解决方案:

在我的 XML 中,我添加了一个标签:

        <ToggleButton
        android:id="@+id/favorite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/share"
        android:layout_marginTop="6dip"
        android:textOn="Favorit"
        android:textOff="Favorit"
        android:text="Favorit"
        android:tag="999" />

然后当我构建指定的视图时,我用我的 item_id 修改每个分离视图上的标签:

       ToggleButton swc_favorite = (ToggleButton) v.findViewById(R.id.favorite);

             if(status==1) {
                 swc_favorit.setChecked(true);
             } else {
                 swc_favorit.setChecked(false);
             }
             // set favorit tag
             swc_favorit.setTag(item_id);

接下来在 clicklistener 中,我从点击的视图中获取该标签:

 final ToggleButton btnf=(ToggleButton)v.findViewById(R.id.favorite);
             btnf.setOnClickListener(new OnClickListener() {  
 public void onClick(View v) {
    String item_id_clicked = (String) btnf.getTag();
 ........

需要将 ToggleButton btnf 设置为 final 才能工作。

谢谢,希望对你们中的一些人有所帮助。

于 2013-02-17T15:24:22.527 回答