android - 使用接口(interface)将数据从 Activity 传递到 Fragment

标签 android interface

在我的应用程序中,我有一个选择器控件(在 fragment 中),当用户单击它时,一个新的菜单 Activity 将显示一些项目列表,当用户单击任何项​​目时,该 Activity 将完成并且界面应传输所选项目字符串再次在 fragment 中选择器,

这是我的菜单 Activity :

public class Menu extends AppCompatActivity {

    ListView listView;


    public interface ItemListener {
        void getItem(String s);
    }


    ItemListener itemListener;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        // Error Goes Here

        itemListener = (ItemListener) this;

        // Define and fill the list view

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                itemListener.getItem("Some Item");
                finish();

            }
        });
    }
}

还有我的 fragment :

public class Addorder extends Fragment implements Menu.ItemListener {


    Picker picker;



    public Addorder() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.fragment_addorder, container, false);

        picker = (Picker) view.findViewById(R.id.picker);


        return view;
    }


    @Override
    public void getItem(String s) {
        picker.setChosenItem(s);
    }
}

但是我遇到了转换错误:

Caused by: java.lang.ClassCastException: Menu cannot be cast to Menu$ItemListener

我错了,任何帮助将不胜感激

最佳答案

在我看来,监听器是无用的。在 Addorder 中,您应该使用 startActivityForResult() 打开菜单 Activity 。在 Menu 中设置结果后,您将在 fragment 的 onActivityResult 回调中收到它。这是如何操作的示例:How to manage startActivityForResult on Android?

关于android - 使用接口(interface)将数据从 Activity 传递到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54202296/

相关文章:

c# - 为什么在 C# 中需要提及访问修饰符来实现接口(interface)属性?

Android - 通过 ADB 通过 vCards 导入联系人

android - 使用 Jetpack Compose 时如何更好地注入(inject) ViewModel 对象?

android - 在 android 中以编程方式旋转可绘制对象

ajax - Web 应用程序如何与服务器通信?

android - 具有多个 fragment 的 Activity 的 MVP

interface - .NET Framework 内置的通用接口(interface)

android - Kotlin:如何访问自定义 View 的属性

java - 错误 "Caused by: java.lang.ClassNotFoundException:"

c# - 从接口(interface)派生的通用对象的 XML 序列化列表,,,