在空中原生扩展的FREFunction中启动活动

时间:2013-01-16 08:33:32

标签: air-native-extension

在我的原生扩展的本机java代码中,我需要跳转到一个特定的页面,我试过的是在FREFunction对象的调用函数中启动一个新的Activity,我的代码是这样的:

`ComponentName comp = new ComponentName(arg0.getActivity() ,SecondActivity.class);
Intent intent = new Intent();
intent.setComponent(comp);
arg0.getActivity().startActivity(intent);`

public class SecondActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);
                EditText show = (EditText) findViewById(R.id.show);
                ComponentName componentName = getIntent().getComponent();
    show.setText("组件包名");
}

}

来自ddms的logcat,我确信已经执行了SecondActivity类,但是在setContentView(R.layout.second)中失败了; 然后我的本机代码有什么问题,我该如何处理它?任何人都可以帮助我或给我同样的建议吗?

2 个答案:

答案 0 :(得分:0)

不幸的是,您无法使用R. *简写来访问ANE中的资源ID。

我写了一个可能对你有帮助的小助手类/函数:

http://labs.distriqt.com/post/1245

它基本上搜索资源包中的资源。

如果您有权访问FREContext实例,也可以使用getResourceId函数,有关详细信息,请参阅以下内容:

http://help.adobe.com/en_US/air/extensions/WS39e706a46ad531be-fd70de2132a8f3874e-8000.html#WS39e706a46ad531be-fd70de2132a8f3874e-7fff

答案 1 :(得分:0)

在startActivity之前使用getResourceID

int layoutID;               

Intent i = new Intent(arg0.getActivity(), SecondActivity.class);

try {
      layoutID = arg0.getResourceId("layout.second");
     } catch (Exception e) {
         System.out.printf("getResourceID() failed with error:\n\"%s\"\n",e.toString());
         Toast.makeText(arg0.getActivity(), "getResourceID() failed" + e.toString(), Toast.LENGTH_SHORT).show();
         return null;
      }

System.out.printf( "layout ID: %d\n", layoutID);
Toast.makeText(arg0.getActivity(), "success: layout ID is " + String.valueOf(layoutID),         Toast.LENGTH_SHORT).show();

i.putExtra("layoutID", layoutID);   

然后您可以使用以下方法检索onCreate上的布局ID:

int layoutID = getIntent().getIntExtra("layoutID", -1);
setContentView(layoutID);