onClick Listener

时间:2015-06-10 15:53:27

标签: java android

我给视图充气,设置它的ID,设置一些标签,在其上设置onClickListener并将其添加到父视图中。

LinearLayout llCategoryListIncome = (LinearLayout)calculatorFlipContainerBack.findViewById(R.id.ll_category_list_income);
// inflate category item
LinearLayout categoryItem = (LinearLayout)inflater.inflate(
                        R.layout.fragment_category_item,
                        container,
                        false);

Integer id = 2;
Integer position = 3;

categoryItem.setId(position);
categoryItem.setTag(R.string.tag_category_position, position);
categoryItem.setTag(R.string.tag_category_id, id);
categoryItem.setOnClickListener(this);
llCategoryListIncome.addView(categoryItem);

在onClick Listener中,我想检查此ID。但ID总是-1。与标签相同的问题。标签始终为空。

public void onClick(View v) {
   Integer position = (Integer)view.getTag(R.string.tag_category_position);
   Integer id = (Integer)view.getTag(R.string.tag_category_id);

   Log.d(TAG, "view get id " + view.getId());   // is null
   Log.d(TAG, "position is " + position);   // is null
   Log.d(TAG, "id is " + id);   // is -1

知道可能出现什么问题吗?

3 个答案:

答案 0 :(得分:1)

分配标记时,必须使用id而不是字符串资源。

使用类似

的内容
categoryItem.setTag(R.id.your_id_for_position, position);

而不是

categoryItem.setTag(R.string.tag_category_position, position);

正如View class documentation

所述
  

指定的键应该是在应用程序的资源中声明的id,以确保它是唯一的

答案 1 :(得分:0)

为什么要两次调用setTag?

你必须在行下面设置一次:

categoryItem.setTag(position);

Onclick方法

Integer id = (Integer)view.getTag();
Log.d(TAG, "id is " + id);

完成

答案 2 :(得分:0)

我建议您在代码中定义并使用持有者。

private class TagHolder
{
    int id; int position;
}
TagHolder tagHolder = new TagHolder();
tagHolder.id = 2;
tagHolder.position = 3;
view.setTag(tagHolder);

public void onClick(View v) {
    TagHolder tagHolder = (TagHolder)view.getTag();
    // tagHolder.id, tagHolder.position
}