如何从自定义基本适配器调用函数

时间:2014-03-16 22:07:18

标签: android checkbox baseadapter

我的自定义基本适配器中有此代码。我在列表视图中的每一行上都有一个复选框,工作正常,我将它们与我的数据库链接。但是,勾选复选框后,我想更新主要活动中的textview的内容,这个自定义基本适配器是从该活动开始的。

 public View getView(final int position, View convertView, ViewGroup parent) {
  ViewHolder holder;

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

   holder.bought = (CheckBox) convertView.findViewById(R.id.checkbox_bought);

   convertView.setTag(holder);
  } else {
   holder = (ViewHolder) convertView.getTag();
  }


  holder.bought.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
          // TODO Auto-generated method stub
          if(((CheckBox)v).isChecked()){
             //update textview in activity
          }else{

          }
      }
  });

勾选复选框后,我想调用此函数,这也是您看到上面显示的自定义基本适配器的位置。

  private void fillData() {
      db.updateTag(tag);

      totalCostView.setText(String.valueOf(tag.cost));
        listOfTodos = db.getAllToDosByTag(nameOfList);

        final ListView lv1 = (ListView) findViewById(R.id.listItems);
        lv1.setAdapter(new MyCustomBaseAdapter(this, list, tag));

    }

3 个答案:

答案 0 :(得分:7)

您可以在getInstance中创建activity方法,然后通过以下方式调用方法:

class MainActivity extends Activity{
   private static MainActivity sMainActivity;

   @override
   private void onCreate(Bundle bundle){
       sMainActivity = this;

并创建get方法

public static MainActivity getInstance() {
        return sMainActivity;
}

然后在adapter调用以下行:

MainActivity.getInstance().fillData();

注意:请确保当前打开activity以避免NullPointerExceptions

答案 1 :(得分:0)

假设您将适配器作为内部类,可以调用外部类方法,如

OutherCLassName.this.fillData();

如果您的适配器位于单独的文件中,您只需要传递一个 Activity trought适配器构造函数,然后只需调用活动变量上的方法:)

答案 2 :(得分:0)

这是评论中特定问题的另一种解决方案,(我没有足够的代表发表评论)

public class Adapter extends BaseAdapter {
//...
 Context mContext;
 public Adapter(Context c ) {
    mContext = c;
  }

传递Context很简单,在代码中查找Adapter的构造函数并传递上下文。

xyz.setAdapter(new Adapter(MainActivity.this));

假设函数fillData()在MainActivity()中,可能从getView()调用函数的内部

  if(mContext.getClass()==MainActivity.class)
       ((MainActivity)mContext).fillData();//the function is inside the MainActivity