【问题标题】:Get data by position in custom adapter by onClickListener通过 onClickListener 在自定义适配器中按位置获取数据
【发布时间】:2014-06-28 20:20:05
【问题描述】:

看看我的扩展 BaseAdapter 的自定义适配器:

public class DrawerAdapter extends BaseAdapter{

    static class ViewHolder{
        TextView        cat_Title;
        TextView        cat_Count;
    }

    private Activity                            mActivity;
    private ArrayList<HashMap<String, String>>  mData;
    private static LayoutInflater               mInflater;
    private JsonArray Categories                = null;
    public JsonObject Cat_Items                 = null;

    private static String                       CATEGORY_NAME;
    private static String                       CATEGORY_CNT;
    private static String                       CATEGORY_ID;

    public DrawerAdapter(Activity a, ArrayList<HashMap<String, String>> d){
        mActivity   = a;
        mData       = d;
        mInflater   = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View dView              = convertView;
        ViewHolder holder       = null;

        HashMap<String, String> dCategorise = new HashMap<String, String>();
        dCategorise             = mData.get(position);
        CATEGORY_NAME           = dCategorise.get("CATEGORY_NAME");
        CATEGORY_CNT            = dCategorise.get("CATEGORY_CNT");
        CATEGORY_ID             = dCategorise.get("CATEGORY_ID");


        if (convertView == null){
            dView               = mInflater.inflate(R.layout.layout_drawer_list_row, null);
            holder              = new ViewHolder();

            holder.cat_Title    = (TextView) dView.findViewById(R.id.category_title);
            holder.cat_Count    = (TextView) dView.findViewById(R.id.category_counter);

            dView.setTag(holder);

        }else{
            holder = (ViewHolder) dView.getTag();
        }


        holder.cat_Title.setTag(position);
        holder.cat_Title.setTypeface(MyriadRegular);
        holder.cat_Title.setText(CATEGORY_NAME);

        holder.cat_Count.setTypeface(Yagut);
        holder.cat_Count.setText(CATEGORY_CNT);


        holder.cat_Title.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                int pos         = (Integer) v.getTag();
                String cat_ID   = mData.get(pos).get(CATEGORY_ID);
            }
        });
        return dView;
    }

}

这是我的自定义适配器,我在导航抽屉中使用它。我想通过单击类别标题来获取类别 ID,并将其发送到片段并以此为基础更改片段数据库。 但它为 cat_ID 返回 null

现在我的问题: 1.为什么返回null? 2.获取发送到片段的类别ID是否正确?

【问题讨论】:

  • CATEGORY_ID = dCategorise.get("CATEGORY_ID"); 的结果是什么?
  • @Rod_Algonquin 对不起,我对 dCategorise 感到困惑?!
  • 结果为空??对于 CATEGORY_ID ??尝试记录它
  • @Rod_Algonquin 啊哈,没有人,确实有问题!我在那里得到了正确的结果,就像另外两个 CATEGORY_NAME 和 CATEGORY_CNT 一样,但是我在 onClick 中得到了 null! :(
  • "确实有问题"???所以它是空的??

标签: android android-fragments onclicklistener baseadapter android-viewholder


【解决方案1】:

我建议在您从 HashMap 中获取时直接将 CATEGORY_ID 添加到按钮的标签中

样本:

改变这个:

holder.cat_Title.setTag(position);

到:

holder.cat_Title.setTag(CATEGORY_ID);
public void onClick(View v) {
            String cat_ID        = (String) v.getTag();
        }

【讨论】:

  • 谢谢伙计,这工作正常。我可以为一个 holderView 设置多个 Tag 吗?
  • @MAY3AM 欢迎您。 :)) ,不只是一个对象。
【解决方案2】:

int pos = (Integer) v.getTag(); 你确定这是对的吗? v.getTag() 会得到一个ViewHolder,你不应该把它转换成整数。

【讨论】:

  • 你知道吗,mData 是一个 ArrayList,我需要一个整数来按位置获取结果,例如 mData.get(int index).get(Object key)。我该怎么办?
  • 只使用String cat_ID = mData.get(position).get(CATEGORY_ID); 可以吗?
  • 不,我不能在那里使用位置,我得到了非最终变量
猜你喜欢
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
相关资源
最近更新 更多