android - 活动不能转换为接口
问题描述
我正在尝试将 AddActivity 数据发送到片段。
但我不知道如何转换 'callback = (OnDatabaseCallback) ?' 在 AddActivity
我测试 '~ getApplcation()' , '~ getApplicationContext()'
但我看到像下一行这样的错误.....
错误
Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.devproject.eventmanager.OnDatabaseCallback
at com.devproject.eventmanager.AddActivity.onCreate(AddActivity.java:115)
我的界面
import java.util.ArrayList;
public interface OnDatabaseCallback {
public void insert(String name, String date, String category, String relation, String money);
public ArrayList<AddList> selectAll();
}
主要活动
public class MainActivity extends AppCompatActivity implements OnDatabaseCallback {
...
...
@Override
public void insert(String name, String date, String category, String relation, String money) {
database.insertRecord(name, date, category, relation, money);
Toast.makeText(getApplicationContext(), "Add", Toast.LENGTH_SHORT).show();
}
@Override
public ArrayList<AddList> selectAll() {
ArrayList<AddList> result = database.selectAll();
Toast.makeText(getApplicationContext(), "Check", Toast.LENGTH_SHORT).show();
return result;
}
添加活动
public class AddActivity extends AppCompatActivity {
...
OnDatabaseCallback callback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
...
...
callback = (OnDatabaseCallback) ??????
callback = (OnDatabaseCallback) getApplication();
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = nameData.getText().toString();
String date = calendarData.getText().toString();
String category = categoryData.getText().toString();
String relation = relationData.getText().toString();
String money = moneyData.getText().toString();
callback.insert(name, date, category, relation, money);
Intent intent = new Intent(AddActivity.this, MainActivity.class);
startActivity(intent);
}
});
fragment 使用 cast 获取 MainActivity 的接口
分段
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_input, container, false);
recyclerView = v.findViewById(R.id.addRecyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
adapter = new AddAdapter();
recyclerView.setAdapter(adapter);
ArrayList<AddList> result = callback.selectAll();
adapter.setItems(result);
return v;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
callback = (OnDatabaseCallback) getActivity();
}
解决方案
推荐阅读
- java - 这是否比迭代 2D 数组的 2 个 for 循环快,还是相同的速度?
- python - Python KeyboardInterrupt 不适用于 socket.connect
- c# - 新表单是否在与调用表单相同的进程中自动启动?
- codeigniter - 我正在尝试使用 Clickatell 的 php(REST api)跟踪消息的传递状态
- python - 即使在无头模式下,是否可以在 Selenium 上使用 `element.click()` 和 Chrome?
- jquery - 如何内爆+添加换行符?
- android - 当图像从上到下下降时,如何减小图像尺寸?
- python - flask-restful和flask中命名空间和蓝图的区别
- python - 如果 b 和 c 是 python 中的数组/数据帧,是否可以使用 `a = b 或 c` 构造?
- android - Android 架构组件 (Android Jetpack) 破坏了 Instant Apps