我正在实施导航抽屉活动,其中我在导航抽屉中有一个片段(由回收者视图组成),以动态地将项目添加到导航抽屉。
我已经成功实现了这个概念但面临一个小问题,当我点击片段中的任何项目时导航抽屉不会关闭。这是因为我无法从片段访问DrawerLayout。
那么如何将片段中的点击侦听器传递给活动以关闭抽屉布局。
谢谢。
答案 0 :(得分:4)
这是一个简单的解决方案。 创建一个界面
public interface ClickInterface {
public void buttonClicked();
}
然后在您的活动中,实现此界面
public class MainActivity extends Activity implements ClickInterface{
@override
public void buttonClicked() {
//do your code here
}
}
现在从片段类
中调用此方法buttonLlickedpublic class ChildFragment extends Fragment {
ClickInterface interface;
public void setInterface(ClickInterface interface) {
this.interface = interface;
}
public void onClick(View v) {
interface.buttonClicked();
}
}
答案 1 :(得分:0)
要与片段中的活动进行通信,您可以使用界面。
有关完整信息,请点击android developer
的官方链接https://developer.android.com/training/basics/fragments/communicating.html
答案 2 :(得分:0)
您可以使用EventBus
在onClick()中,发布一个事件并在您的活动中订阅该事件。
//Inside your fragment post the event
@Override
public void onClick(View view) {
EventBus.getDefault().post(SomeEvent)
}
在您的活动中订阅该活动
@Subscribe
public void onEvent(SomeEvent someEvent){
//do what you want
}
此外,请确保在您的活动中分别在onCreate()和onDestroy()中注册和注销EventBus。
@Override
public void onCreate() {
//...
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
@Override
public void onDestroy() {
//...
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}