Nested inner Activity class in android

∥☆過路亽.° 提交于 2019-12-19 16:54:09

问题


Is declaring a class that extends Activity inside another Activity class possible? If it is, how would I register that class in the manifest? Also, is that something that can be reasonably done or is it a bad idea?

I was thinking of something like

class ListClass extends ListActivity{

    ...
    ArrayList items;

    class ItemClass extends Activity{

        ...
        Item item;

        @Override
        onCreate(){
            Integer pos = getIntent().getExtras().getInt("pos");
            item = items.get(pos);
        }
    }

    @Override
    onItemClick(int position){

        startActivity(new Intent(this, ItemClass.class).putExtra("pos", position));

    }
}

Note the syntax isn't 100% correct obviously, mostly pseudocode.


回答1:


No, that's not possible. After all, the Android operating system will need to instantiate the Activity if it is started at any point (say, if you start it through an intent), and it's impossible to instantiate an ItemClass without a parent ListClass.

Remember that each Activity is completely independent and can be started at any point through an intent.




回答2:


Yes, it does work -- it is just another class -- you just need to declare your activity using inner class notation in AndroidManifest.xml:

<activity android:name=".ListClass$ItemClass"/>

Seems to work fine for me, but perhaps when this question was asked, it wasn't supported in older versions of Android?

Not sure WHY you'd want to do this, but you can.




回答3:


I'd also be curious why you'd want to do this.

However, I don't see any reason why it wouldn't work. Couldn't you reference it in the AndroidManifest as you normally would as long as both classes are public? i.e. com.falmarri.ListClass.ItemClass?

Edit: Nevermind, this doesn't work as EboMike pointed out.



来源:https://stackoverflow.com/questions/4054971/nested-inner-activity-class-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!