簡體   English   中英

從適配器類到活動的方法調用

[英]method call from adapter class to activity

適配器:

check_list_item.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        JPrequirements.prepareSelection(v, getAdapterPosition());
    }
});

JPrequirements是活動。 prepareSelection是活動內部的非靜態方法。 我無法從適配器訪問它。

錯誤:

非靜態方法不能從靜態上下文中引用

哪個是對的。 這就是為什么我嘗試使用:

JPrequirements().prepareSelection(v, getAdapterPosition()); // Creating an instance...

但是,問題是我在這里丟失了所有活動組件。 例如。 布局組件和其他支持變量。 我不要 處理此問題的最佳方法是什么? 如何從適配器到活動獲取更新值? 因此,我可以實時顯示它。

謝謝。

您可以通過interface實現此目的。 首先,將interface類定義為:

public interface ActivityAdapterInterface {
    public void prepareSelection(View v, int position);
}

現在,在“ Activity實現interface為:

public class JPrequirements extends AppCompatActivity implements ActivityAdapterInterface {
    ...
    public void prepareSelection(View v, int position) {
        // cool stuff here
    }
    ...
}

確保通過Adapter的構造函數this接口引用傳遞給Adapter 然后,最終通過點擊將其稱為:

check_list_item.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) {
        mActivityAdapterInterface.prepareSelection(v, getAdapterPosition());
    } 
}); 

[編輯]

要為您的Adapter提供interface ,請為其提供構造函數。

public class YourAdapter ... {

    private ActivityAdapterInterface mActivityAdapterInterface;

    public YourAdapter(..., ActivityAdapterInterface activityAdapterInterface) {
        activityAdapterInterface = mActivityAdapterInterface;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM