我正在实现导航抽屉活动,其中我在导航抽屉中有一个片段(由回收站视图组成),以便将项目动态添加到导航抽屉中。如何将片段中的点击事件传递给Container活动?
我已经成功实现了这个概念,但面临着一个小问题,当我点击片段中的任何项目时,导航抽屉没有关闭。这是因为我无法从片段访问DrawerLayout。
那么如何将我的片段中的点击侦听器传递给关闭抽屉布局的活动。
谢谢。
我正在实现导航抽屉活动,其中我在导航抽屉中有一个片段(由回收站视图组成),以便将项目动态添加到导航抽屉中。如何将片段中的点击事件传递给Container活动?
我已经成功实现了这个概念,但面临着一个小问题,当我点击片段中的任何项目时,导航抽屉没有关闭。这是因为我无法从片段访问DrawerLayout。
那么如何将我的片段中的点击侦听器传递给关闭抽屉布局的活动。
谢谢。
这是一个简单的解决方案来做到这一点。 您的活动创建一个接口
public interface ClickInterface {
public void buttonClicked();
}
然后,实现这个接口
public class MainActivity extends Activity implements ClickInterface{
@override
public void buttonClicked() {
//do your code here
}
}
现在调用此方法从片段类buttonclicked
public class ChildFragment extends Fragment {
ClickInterface interface;
public void setInterface(ClickInterface interface) {
this.interface = interface;
}
public void onClick(View v) {
interface.buttonClicked();
}
}
嗨。我试图实现这个答案中提到的一个,但我得到一个NullPointer异常执行。 –
你可以在这里发布logcat –
你叫做setInterface的片段类的创建吗? –
从您可以使用片段与活动沟通界面。
有关完整信息,请遵循Android开发者
https://developer.android.com/training/basics/fragments/communicating.html
的这个官方链接,您可以使用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);
}
}
在这里发布您的代码 –