Android接口

时间:2013-07-26 07:31:24

标签: android interface android-fragments fragment-tab-host

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

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));
        }
    }

我尝试通过在clicked()上调用消息来确保Logcat工作视图接口方法,但是当我使用Button时,上面的错误总是提示我。我已检查data是否为空并返回true。我有点困惑,我试图从data方法检查Activity的无效性返回false但是当我通过接口访问任何方法覆盖时它总是返回{{ 1}}。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

这是我朋友告诉我解决这个问题的方法。使用getSupportFragmentManager。他还告诉我,使用其构造函数创建ActivityFragment不适用于Android平台。所以我转而采用向FragmentTabHost添加标签的传统方式。

@Override
public void onBackPressed() {
    //tabs.get(fTabHost.getCurrentTabTag()).clicked();
    ((Selection) getSupportFragmentManager().findByFragmentByTag(fTabHost.getCurrentTabTag()).clicked();
}