Listview自定义适配器通知父活动

时间:2012-08-17 18:15:40

标签: android android-listview android-activity

我创建了一个列表视图,它位于一个较大的活动中(列表视图填充了一半的屏幕,其上方有输入/按钮)。此列表视图使用自定义适配器绘制行视图。

在行视图中是一个按钮,当点击/点击时,我希望活动处理,而不是适配器。但是我不知道在适配器类中如何,我可以告诉它使用该活动。因为它是OOP,我假设我必须在设置适配器时传递对活动的某种引用(而不是将父活动硬编码到适配器中)。

我有一个simlier问题,在活动和适配器之间共享一个数据集(我希望适配器使用活动中的arraylist),但是我无法解决那个问题,所以我最终将arraylist传递给了复制到适配器。所以我希望找出点击监听器,也意味着我可以摆脱那些必须创建的重复数据?

所有代码都非常简单,但这是一个粗略的概述:

设置列表适配器&声明数据集(这是活动数据集,而不是适配器)

numbersListAdapter = new NumberListAdapter(this);
numbersList.setAdapter(numbersListAdapter);
this.selectedContacts = new HashMap<Long, HashMap<String, String>>();

将条目添加到活动数据集并添加到适配器数据集

HashMap<String, String> tempa = new HashMap<String,String>();
tempa.put("name", name);
tempa.put("number", number);
this.selectedContacts.put(contactID, tempa);

this.numbersListAdapter.addEntry(contactID, tempa);

适配器添加条目

public void addEntry(Long id, HashMap<String, String> entry) {  

        entry.put("contactID", id.toString());      

        this.selectedNumbers.add(entry);

        this.notifyDataSetChanged();

    }

适配器构造函数

public NumberListAdapter(Context context) {

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

        mInflater = LayoutInflater.from(context);

    }

请注意:这是我第一次尝试这个东西。我从来没有做过android,java和非常非常小的OO编程。所以我已经知道代码很可能效率低下且非常糟糕。但我必须以某种方式学习:)

修改

好的,所以我意识到我有点傻了,我只需要使用传递给适配器的上下文来引用父活动。但是我仍然没有得到它。下面是代码:

适配器的构造函数

numbersListAdapter = new NumberListAdapter(this);

变量声明和构造函数方法

public class NumberListAdapter extends BaseAdapter  {

    private LayoutInflater mInflater;

    private ArrayList<HashMap<String, String>> selectedNumbers;

    private Context parentActivity;



    public NumberListAdapter(Context context) {

        parentActivity = (Context) context; 

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

        mInflater = LayoutInflater.from(context);

    }

听众

Button theBtn = (Button)rowView.findViewById(R.id.actionRowBtn);
            theBtn.setOnClickListener(this.parentActivity);

我从eclipse收到两条消息,第一条消息是当我注释掉听众并且得到的时候 The value of the field NumberListAdapter.parentActivity is not used

一旦我在i get

中添加了监听器

The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the arguments (Context)

显然我做错了什么。也可能是一个非常愚蠢的错误

1 个答案:

答案 0 :(得分:1)

如果您需要在单击列表视图的行时获得回调,则可以使用

  

numbersListAdapter.setOnitemitemClickLiistener

但是如果你需要点击每一行内的按钮,你将不得不覆盖

适配器的getView功能,然后单独设置按钮的onclicklistener

编辑: 将语境转换为活动

theBtn.setOnClickListener((YourActivity)this.parentActivity);