gpt4 book ai didi

java - 从 Adapter 中的 Activity 调用方法

转载 作者:行者123 更新时间:2023-12-02 12:18:07 27 4
gpt4 key购买 nike

我正在使用 Retrofit 从服务器加载数据到 RecyclerView 中。我已经成功实现了 GetPost Retrofit 方法,但在 PutDelete 方面遇到了一些问题那些。由于 ReclyclerView 需要 Adapter 来加载数据,并且我需要获取正在单击的行的位置,因此我必须实现 onKeyPressed (因为我正在使用 EditText)在我的 Adapter 中。

问题是调用我的Interceptor的方法、Retrofit调用和一切都在我的Activity中。因此,我决定从适配器内的此 Activity 调用该方法来执行单个项目的放置和删除操作。但我得到了

java.lang.ClassCastException saying that the method cannot be casted to the Adapter.

这是 onKeyPressed 方法,ViewCategoryActivity 是我的 Activity,SendNetworkRequest 是我的方法:

holder.nameCategory.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {

System.out.println("Entrou no adapter!!");
Category2 category = new Category2();
category.setName(holder.nameCategory.getText().toString());
((ViewCategoriesActivity)mContext).SendNetworkRequest(categoryList.get(position).getProjectId(), 2, categoryList.get(position).get_id(), new SendCategory(holder.nameCategory.getText().toString()));

//Variable to check if the category inserted is equal to a previous one
int bool = 0;
//The for goes through the list and tries to find a category with the name equal to the one inserted
for (int i = 0; i < categoryList.size(); i++){

//if it finds equal names bool = 1
if (categoryList.get(i).getName().equals(holder.nameCategory.getText().toString())){
bool = 1;
Toast.makeText(mContext, mContext.getResources().getString(R.string.category_different_name),
Toast.LENGTH_LONG).show();
}
}

//There's no category with the same name so it' OK so insert a new one
if (bool == 0){

if(mContext instanceof ViewCategoriesActivity){
((ViewCategoriesActivity)mContext).SendNetworkRequest(categoryList.get(position).getProjectId(), 2, categoryList.get(position).get_id(), new SendCategory(holder.nameCategory.getText().toString()));
}
//categoryList.add(category);

} else {

}


// hide virtual keyboard
InputMethodManager imm =
(InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(holder.nameCategory.getWindowToken(), 0);
return true;
}
return false;
}
});

最佳答案

您应该将监听器从您的 Activity 传递到适配器。然后,您应该使用该监听器来调用 Activity 中的函数。即,如果您像下面这样调用适配器,

adapter = new DataAdapter(data);

其中数据可以是数组列表(假设),然后像这样传递上下文

adapter = new DataAdapter(data,ViewCategoriesActivity.this);

使用适配器中的构造函数接受此监听器,然后调用您的 Activity 函数,例如listener.yourFunction()

关于java - 从 Adapter 中的 Activity 调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46002666/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com