按listView适配器中的按钮以获取此行中的数据

时间:2013-12-30 14:49:55

标签: android android-listview baseadapter

我有一个listView,显示在sqlite中的数据,我正在使用baseAdapter。 列表行包含文本和按钮。

我按下每行的按钮,从数据库中给出我所选行的每个数据(不是按行本身)

这是listView的代码:

tipsList = new ArrayList<HashMap<String, String>>();

 list = (ListView) rootView.findViewById(R.id.tipList);

 do {
  map = new HashMap<String, String>();

            map.put(DAO.TIP_ID, c.getString(c.getColumnIndex(c.getColumnName(0))));
            map.put(DAO.TIP_CONTENT, c.getString(c.getColumnIndex(c.getColumnName(1))));
            map.put(DAO.TIP_FAVORITE, c.getString(c.getColumnIndex(c.getColumnName(2))));

            // adding HashList to ArrayList
            tipsList.add(map);

        } while (c.moveToNext());


        tipsAdapter = new TipsAdapter(getActivity(), tipsList, tipType, db);
        list.setAdapter(tipsAdapter);

这是TipsAdapter.java的代码

public class TipsAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater = null;
    Context context;
    Typeface tf;
    String tipID;
    String tipText;
    String isFavorite;
    DAO db;
    HashMap<String, String> quote;
    int selectedTipType;

    public TipsAdapter(Activity a, ArrayList<HashMap<String, String>> d, int selectedTipType, DAO db) {
        activity = a;
        data = d;
        context = a;
        this.selectedTipType = selectedTipType;
        this.db = db;
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    // ==============================================================================

    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.tip_list_row, null);

        TextView tipContent = (TextView) vi.findViewById(R.id.tip_text); // tip
        final ImageView favStar = (ImageView) vi.findViewById(R.id.favorite_star);

        tf = Typeface.createFromAsset(activity.getAssets(), "fonts/bauhausm_0.ttf");
        tipContent.setTypeface(tf);

        quote = new HashMap<String, String>();
        quote = data.get(position);

        tipText = quote.get(DAO.TIP_CONTENT).trim();


        favStar.setOnClickListener(new View.OnClickListener() {

              @Override
              public void onClick(View view) {

                        // I want here get all data like tipId - tipText - tipFavotite of the current row in toast
              }

            });



        return vi;
    }
     }

按下按钮时如何获取当前行的数据? 希望有人得到我的意思。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

也许你可以设置按钮的标签。

favStar.setTag(position);
favStar.setOnClickListener (new OnClickListener()
{
    @Override
   public void onClick(View view) {

           int position = (int) view.getTag();

           HashMap<String, String>() quote = data.get(position);

           String tipText = qout.get(DAO.TIP_CONTENT);
           String tipContent = ......;

   }
}

答案 1 :(得分:0)

我自己解决了这个问题,将position设为final并将quote = data.get(position);放在按钮的监听器中。