首页 > 解决方案 > 活动不能转换为接口

问题描述

我正在尝试将 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();
}

标签: android

解决方案


推荐阅读