通过 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 从片段获取编辑文本到其托管活动的主要内容,如果未能解决你的问题,请参考以下文章