亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從適配器調用活動方法

從適配器調用活動方法

楊__羊羊 2019-10-05 14:53:01
是否可以調用Activityfrom中定義的方法ListAdapter?(我想打一個Button在list's行單擊此按鈕時,它應該執行的方法,即在相應的活動定義。我試圖設置onClickListener在我ListAdapter,但我不知道該怎么稱呼這種方法,什么是它的路徑。 ..)當我使用時Activity.this.method(),出現以下錯誤:No enclosing instance of the type Activity is accessible in scope任何想法 ?
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

是的你可以。


在適配器中添加新字段:


private Context mContext;

在適配器的構造函數中,添加以下代碼:


public AdapterName(......, Context context) {

  //your code.

  this.mContext = context;

}

在適配器的getView(...)中:


Button btn = (Button) convertView.findViewById(yourButtonId);

btn.setOnClickListener(new Button.OnClickListener() {

  @Override

  public void onClick(View v) {

    if (mContext instanceof YourActivityName) {

      ((YourActivityName)mContext).yourDesiredMethod();

    }

  }

});

用您自己的類名替換,您可以在其中看到代碼,活動等。


如果您需要使用同一適配器進行多個活動,則:


創建一個界面


public interface IMethodCaller {

    void yourDesiredMethod();

}

在您需要具有此方法調用功能的活動中實現此接口。


然后在Adapter getView()中,調用如下:


Button btn = (Button) convertView.findViewById(yourButtonId);

btn.setOnClickListener(new Button.OnClickListener() {

    @Override

    public void onClick(View v) {

        if (mContext instanceof IMethodCaller) {

            ((IMethodCaller) mContext).yourDesiredMethod();

        }

    }

});

大功告成 如果需要將此適配器用于不需要此調用機制的活動,則代碼將不會執行(如果檢查失?。?/p>


查看完整回答
反對 回復 2019-10-05
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

原版的:

我了解當前答案,但需要一個更清晰的示例。這是我與Adapter(RecyclerView.Adapter)和一起使用的示例Activity。


在您的活動中:

這將實現interface我們在中擁有的Adapter。在此示例中,當用戶單擊中的項目時,將調用它RecyclerView。


public class MyActivity extends Activity implements AdapterCallback {


    private MyAdapter myAdapter;


    @Override

    public void onMethodCallback() {

       // do something

    }


    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


        myAdapter = new MyAdapter(this);

    }

}

在您的適配器中:

在中Activity,我們啟動了我們的程序Adapter并將其作為參數傳遞給構造方法。這將啟動我們interface的回調方法。您可以看到我們使用回調方法來實現用戶點擊。


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {


    private AdapterCallback adapterCallback;


    public MyAdapter(Context context) {

        try {

            adapterCallback = ((AdapterCallback) context);

        } catch (ClassCastException e) {

            throw new ClassCastException("Activity must implement AdapterCallback.", e);

        }

    }


    @Override

    public void onBindViewHolder(MyAdapter.ViewHolder viewHolder, int position) {

        // simple example, call interface here

        // not complete

        viewHolder.itemView.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View view) {

                try {

                    adapterCallback.onMethodCallback();

                } catch (ClassCastException e) {

                   // do something

                }

            }

        });

    }


    public static interface AdapterCallback {

        void onMethodCallback();

    }

}


查看完整回答
反對 回復 2019-10-05
  • 3 回答
  • 0 關注
  • 687 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號