安卓接口技术

4

我总是遇到这个问题:java.lang.IllegalStateException:Could not execute method of the activity。我打算执行一个Android组件事件(例如按钮事件-指示单击此按钮的次数)。下面是这个问题的代码片段:

interface Selection {
    public void clicked();
}
public class ParentClass extends FragmentActivity {
    // fTabs : FragmentTabHost
    // tabs : Map<String, Selection>    
    private void initialize() {
        // fistFrag : FirstChildClass = new FirstChildClass()
        // secondFrag : SecondChildClass = new SecondChildClass()
        tabs.put("first", firstFrag);
        tabs.put("second", secondFrag);
        fTabs.add(fTab.newTabSpec("first").setTitle("First"), firstFrag.getClass(), null)
        fTabs.add(fTab.newTabSpec("second").setTitle("Second"), secondFrag.getClass(), null)
    }
    @Override
   public void onBackPressed() {
       tabs.get(fTabHost.getCurrentTabTag()).clicked();
   }
}    
public class FirstChildClass extends Fragment implements Selection {
        // data : TextView
        // hit : int = 0
        @Override
        public void clicked() {
            data.setText(String.format("Hit Count: %d", ++hit));
        }
    }
public class SecondChildClass extends Fragment implements Selection {
        // data : TextView
        // hit : int = 0
        @Override
        public void clicked() {
            data.setText(String.format("Hit Count: %d", ++hit));
        }
    }

我尝试使用Logcat来确认通过调用clicked()的界面交互方法是否有效,并且它可以工作,但是当我使用Button时,上面的错误总是提示。 我已经检查了data是否为null,它返回true。我有点困惑,我尝试从Activity方法检查data的空值,它返回false,但是当我访问由接口覆盖的任何方法时,它总是返回true。有解决方法吗?

我认为你的选项卡应该是一个Map<String, ChildClass>,因为现在你只是引用了接口(selection),而没有将其实现到活动中。 - Niko Adrianus Yuwono
我已经更新了我的问题,关于如何创建ChildClass对象。 - David B
@NAYOSO:抱歉,我刚刚才理解你的评论,意思是在fTabHost中需要添加除了ChildClass之外的其他类。 - David B
你能发更多的代码吗?如果太长了,你可以尝试在这里发布 -> https://gist.github.com/ - Niko Adrianus Yuwono
1
你能发布完整的异常吗? - Sazzad Hissain Khan
你能解释一下数据在哪里声明和初始化吗? - Mikel
1个回答

1
这里有一个解决问题的方法,是我朋友告诉我的。使用getSupportFragmentManager。他还告诉我,在Android平台上,使用构造函数创建ActivityFragment是不适用的。所以我又换回了传统的方式,将选项卡添加到FragmentTabHost中。
@Override
public void onBackPressed() {
    //tabs.get(fTabHost.getCurrentTabTag()).clicked();
    ((Selection) getSupportFragmentManager().findByFragmentByTag(fTabHost.getCurrentTabTag()).clicked();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接