通过 id 从片段获取编辑文本到其托管活动

Posted

技术标签:

【中文标题】通过 id 从片段获取编辑文本到其托管活动【英文标题】:Get Edit text by id from fragment to its hosting Activity 【发布时间】:2018-07-29 09:10:47 【问题描述】:

我有一个托管多个选项卡(片段)的活动,现在我想通过 id 从选项卡(片段)获取 EditText 到其托管活动并在其上设置侦听器。

所以请帮我摆脱它。

提前致谢

【问题讨论】:

为什么不在Fragment中设置监听器? Communicating between a fragment and an activity - best practices的可能重复 您不能使用同一组件中不存在的findViewById()。您可以在 Fragment 和 Activity 之间进行通信。 EditText edittext =fragmentview.findViewById(R.id.edittext); 并在 Fragment 中设置监听器 @AbdulKawee 感谢它帮助我解决问题 【参考方案1】:

要从片段中按 id 查找视图,请添加以下内容:

EditText edittext = getActivity().findViewById(R.id.edittext);

【讨论】:

【参考方案2】:

简单的解决方案是

EditText editText = (EditText)getActivity().findViewById(R.id.viewid);
if( editText != null)
  // set listener here 

【讨论】:

【参考方案3】:

在你的活动中

public EditText editText;
if(editText != null)
editText.setOnClickListner(this);

在你的片段中

Activity activity = (Activity)context;
//where context is your fragment's context
activity.edtText = (EditText)findViewById(R.id.viewid);

确保在editText不为空时设置监听器,否则你会得到空指针异常。

【讨论】:

【参考方案4】:

对此可以有多种解决方案。在我看来,最好的方法是制作一个名为 Callback 的接口,如下所示

public interface Callback

public void onListenerActionPerformed(Some args);
 

现在在您希望附加侦听器的任何片段中,编写一个函数

private Callback callback;
public void setCallback(Callback callback)

this.callback=callback;

现在在片段中的 EditText 和相应函数 write 的主体内注册侦听器

callback.onListenerActionPerformed(Some parameter)

现在从您的活动中,就在您实例化片段写入的位置下方,

 fragmentInstanceName.setCallback(new Callback()
    public void onListenerActionPerformed(Some args)
    //Your implementation
      
    );

【讨论】:

以上是关于通过 id 从片段获取编辑文本到其托管活动的主要内容,如果未能解决你的问题,请参考以下文章

从父活动android获取片段编辑文本值

软输入键盘隐藏编辑文本

如何在 Fragment 之间传递值

从单个按钮从多个片段中提取数据

android - 从活动调用完成会破坏托管片段吗?

在片段中接收 NFC 的应用程序创建托管活动的新实例