【问题标题】:How to pass data from BaseAdapter to AppCompatDialogFragment? Android如何将数据从 BaseAdapter 传递到 AppCompatDialogFragment?安卓
【发布时间】:2020-10-30 04:26:58
【问题描述】:

我正在尝试将数据从从 BaseAdapter 扩展的 FoodAdapter 传递到从 AppCompatDialogFragment 扩展的 FoodDialog。当用户单击 list_item 中的按钮时,我需要将数据传递给 FoodDialog。

addToCart = convertView.findViewById(R.id.button);
        View finalConvertView = convertView;
        addToCart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("TAG", String.valueOf(position));
                TextView s = (TextView) finalConvertView.findViewById(R.id.foodName);
                ConfirmFoodDialog confirmFoodDialog = new ConfirmFoodDialog();

                confirmFoodDialog.show(((CategoryMenu) context).getSupportFragmentManager(), "Title");

                Intent intent = new Intent(finalConvertView.getContext(), ConfirmFoodDialog.class);
                intent.putExtra("Dish", s.getText().toString()); // s.getText().toString() returns the desired value
                
                
            }

ConfirmFoodDialog.class

public Dialog onCreateDialog(Bundle savedInstanceState){
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyCustomTheme);
        LayoutInflater inflater = getActivity().getLayoutInflater();

        Intent intent = getActivity().getIntent();
        food = intent.getStringExtra("Dish"); // food is a String variable
        System.out.println(food); // I don't know why food returns null
}

【问题讨论】:

  • confirmFoodDialog.show(((CategoryMenu) context).getSupportFragmentManager(), "Title"); 在这里您正在显示对话框,然后Intent intent = new Intent(finalConvertView.getContext(), ConfirmFoodDialog.class); intent.putExtra("Dish", s.getText().toString()); // s.getText().toString() returns the desired value 您正在构建一个什么都不做的意图

标签: java android


【解决方案1】:

鉴于您使用show(FragmentManager) 显示对话框,您的对话框似乎是DialogFragment 的子类。如果是这种情况,那么您向它传递信息的方式与向任何Fragment 传递信息的方式相同:通过arguments Bundle

Bundle args = new Bundle();
args.putString("Dish", s.getText().toString());

ConfirmFoodDialog confirmFoodDialog = new ConfirmFoodDialog();
confirmFoodDialog.setArguments(args);
confirmFoodDialog.show(((CategoryMenu) context).getSupportFragmentManager(), "Title");

要从片段中读取值,请访问arguments 并读取您的信息:

public Dialog onCreateDialog(Bundle savedInstanceState){
    // ...

    food = getArguments().getString("Dish");
    System.out.println(food);
}

您可以通过implementing the newInstance() pattern 为您的DialogFragment 简化第一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多