【问题标题】:Call functions of Activities Belonging to a Fragment调用Fragment所属Activity的函数
【发布时间】:2012-07-18 21:53:37
【问题描述】:

我在 Android 下使用多个 Fragments,对如何从嵌入式应用发送和接收数据感到困惑。

为了简单解释,我有一个ListFragment 和一个MapFragment 使用here 解释的方法。这意味着List 存在于ListFragment 类中,但是MapActivity 是在LocalActivityManagerFragment 下调用的Activity。

一切都适用于Fragments:ListsMapFragment 上实施的航路点、航路点和当前位置。我也了解如何使用getFragmentManager() 获取个人Fragments 并使用他们的事件。但是,我无法使用此方法访问MapActivity 下的函数。如果我不能简单地使用getFragmentManager,如果我单击ListView 上的一个项目,我该如何使用诸如goToLocation(在MapActivity 下创建)之类的命令??

【问题讨论】:

    标签: android android-fragments android-mapview


    【解决方案1】:

    Fragment 和 Activity 之间的通信:

    活动>片段:

    使用 this 调用片段的公共方法。

    TestFragment testFrag = (TestFragment) getFragmentManager().getFragmentById(R.id.testfragment);
    
    if(testFrag != null && testFrag.isAdded())
        testFrag.testMethod("Test");
    

    片段 > 活动

    要将消息发送到您需要使用接口的活动,因此在片段类中添加:(不在任何方法中)

    public interface testInterface{
        public void testMethod(String test);
    }
    
    testInterface mCallback;
    
    @Override
    public void onAttact(Activity a){
        try{
            mCallback = (testInterface) a;
        }catch(Exception e){
            //TODO
        }
    }
    

    那么你可以用任何方法调用它:

    mCallback.testMethod("hello");
    

    然后为活动制作它implements testInterface并导入界面

    然后在activity中拥有这个方法

    @Override
    public void testMethod(String testString){
    
    }
    

    :) 再要求什么就行了。


    编辑

    从我第一次阅读你的问题开始,我认为这是你想要的对不起,仍然可以涵盖你想要的。

    我认为您要求的只是一个 onItemClick 方法,对吗?

    所以在界面中你可以有

    public void onItemClicked(AdapterView<?> parent, View view, int position, long id);
    

    然后在片段中调用 onItemClick 时,您可以在其中使用它

    mCallback.onItemClicked(parent, view, position, id);
    

    然后在活动中,鉴于它实现了您可以拥有的接口

    @Override
    public void onItemClicked(AdapterView<?> parent, View view, int position, long id){
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      相关资源
      最近更新 更多