Android 如何通过接口控制另一个片段中片段的视图

Android 如何通过接口控制另一个片段中片段的视图,android,android-fragments,fragment,communication,Android,Android Fragments,Fragment,Communication,我正在构建一个meme生成器应用程序。它有2个片段 第一个片段下面有2个文本视图和一个图像视图。 第二个片段有两个编辑文本和两个按钮 第一个片段中的ImageView(可单击)有一个占位符图像 1-如果未选择其他图像,我想将第二个片段中提到的视图的可见性更改为“已消失” 2-我想通过检查可绘制文件的名称来实现这一点 我被告知我应该为此使用一个接口 如何使用界面执行订单 下面是我在同一个应用程序中使用的界面示例。我想知道怎样做才能有所不同 public class BottomControlsFr

我正在构建一个meme生成器应用程序。它有
2个片段

第一个片段下面有
2个文本视图
一个图像视图

第二个片段有两个编辑文本和两个按钮

第一个片段中的ImageView(可单击)有一个占位符图像

1-如果未选择其他图像,我想将第二个片段中提到的视图的可见性更改为“已消失”

2-我想通过检查可绘制文件的名称来实现这一点

我被告知我应该为此使用一个接口

如何使用界面执行订单

下面是我在同一个应用程序中使用的界面示例。我想知道怎样做才能有所不同

public class BottomControlsFragment extends Fragment {

    EditText topEditText, bottomEditText;
    Button btnCreate, btnReset;

    BottomControlsListener activityCommander;

    public interface BottomControlsListener{ void createMeme(String top, String bottom);}

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        try{activityCommander = (BottomControlsListener) context;}

        catch (ClassCastException e){throw new ClassCastException(context.toString());}
    }



}

您应该使用LocalBroadCast或viewModel,不要使用接口回调通信,当片段管理器想要独立启动片段时,它会导致问题

  • 制作广播接收器以改变2st框架中的可见性
  • 通过
    LocalBroadcastManager
    实例在onResume中注册广播接收器,并在
    onPause
  • 通过
    LocalBroadcastManager
    实例,在第二帧
    onResume
    中注册操作时,检查第一个片段中的差异图像。有关更多信息,请在谷歌上查看示例

  • 更新:如果你想使用界面,正如谷歌文档所说:

    建议在片段之间进行通信的方法是创建共享的ViewModel对象。这两个片段都可以通过其包含活动访问ViewModel。片段可以更新ViewModel中的数据,如果数据是使用LiveData公开的,则新状态将被推送到另一个片段,只要它正在观察来自ViewModel的LiveData。要了解如何实现这种通信,请阅读《ViewModel指南》中的“片段间共享数据”部分

    我建议你也这样做。这是如何做到的

    首先,您需要创建viewModel:

    public class SharedViewModel extends ViewModel {
    private final MutableLiveData<Item> selected = new MutableLiveData<Item>();
    
    public void select(Item item) {
        selected.setValue(item);
    }
    
    public LiveData<Item> getSelected() {
        return selected;
    }
    }
    

    使用起来很轻松。如果您有任何问题,请告诉我。

    这些碎片是否同时可见??或者用第一个替换第二个?它们同时可见。一个是ImageView支架,另一个只是编辑文本和按钮,用于向图像添加标题。可能重复@OnurOzbek我已向anwerI添加了说明。我要求演示。问题不是在真空中“两个片段之间通信”。如何控制另一个片段中的视图?我在YouTube上看到的例子都是关于将文本从一个片段发送到另一个片段的。我想知道在其他片段中控制视图背后的策略。
    public class TopImageFragment extends Fragment {
    
        ...
    
        public void setMemeText(String top, String bottom){
            topTextView.setText(top);
            bottomTextView.setText(bottom);
        }
    
        ...
    
    public class SharedViewModel extends ViewModel {
    private final MutableLiveData<Item> selected = new MutableLiveData<Item>();
    
    public void select(Item item) {
        selected.setValue(item);
    }
    
    public LiveData<Item> getSelected() {
        return selected;
    }
    }
    
    public class FirstFragment extends Fragment {
        private SharedViewModel model;
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
            itemSelector.setOnClickListener(item -> {
                model.select(item);
            });
        }
    }
    
    
    public class SecondFragment extends Fragment {
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
            model.getSelected().observe(this, { item ->
               // Update the UI.
            });
        }
    }