【问题标题】:Press button in listView adapter to get data in this row按下 listView 适配器中的按钮以获取该行中的数据
【发布时间】:2013-12-30 14:49:54
【问题描述】:

我有一个 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;
    }
     }

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

【问题讨论】:

    标签: android android-listview baseadapter


    【解决方案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 = ......;
    
       }
    }
    

    【讨论】:

    • 它在这一行给了我 NullPointerException int position = (Integer) view.getTag();
    【解决方案2】:

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

    【讨论】:

    • 您是否设置了按钮视图的标签?如果你确实设置了它。它不应该返回 null。好的好的。如果你这样做了,你自己解决了。
    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多