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

use*_*039 2 checkbox android 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{

          }
      }
  });
Run Code Online (Sandbox Code Playgroud)

这是勾选复选框时我想要调用的函数,也是您在上面看到的自定义基本适配器开始的位置.

  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));

    }
Run Code Online (Sandbox Code Playgroud)

Sam*_*awy 7

您可以getInstance在您创建方法activity然后通过它调用方法,如下所示:

class MainActivity extends Activity{
   private static MainActivity sMainActivity;

   @override
   private void onCreate(Bundle bundle){
       sMainActivity = this;
Run Code Online (Sandbox Code Playgroud)

并创建get方法

public static MainActivity getInstance() {
        return sMainActivity;
}
Run Code Online (Sandbox Code Playgroud)

然后在你的adapter电话中以下一行:

MainActivity.getInstance().fillData();
Run Code Online (Sandbox Code Playgroud)

注意:确保activity当前打开以避免任何操作NullPointerExceptions