Wednesday, 15 September 2010

Multiple layout files Android -



Multiple layout files Android -

i have 2 xml files layout - main.xml , test.xml. here code in test.xml:

<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <listview xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/menu_objoptions" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" > </listview> </linearlayout>

when seek instance of listview

findviewbyid( r.id.menu_objoptions )

it returns null. why that?

edit: here relevant java code:

public void objclick(string objid, long x, long y) { final string objid = objid; final long x = x; final long y = y; seek { mhandle.runonuithread(new runnable() { @override public void run() { popupwindow popup; linearlayout layout; listview mainlistview; arrayadapter<string> listadapter; string[] planets = new string[] { "mercury", "venus", "earth", "mars", "jupiter", "saturn", "uranus", "neptune"}; arraylist<string> planetlist = new arraylist<string>(); planetlist.addall( arrays.aslist(planets) ); listadapter = new arrayadapter<string>(mhandle, r.layout.menu_objoptions_row, planetlist); listadapter.add( "ceres" ); listadapter.add( "pluto" ); listadapter.add( "haumea" ); listadapter.add( "makemake" ); listadapter.add( "eris" ); popup = new popupwindow(mhandle); layout = new linearlayout(mhandle); layout.setorientation(linearlayout.vertical); mainlistview = (listview) mhandle.findviewbyid( r.id.menu_objoptions ); mainlistview.setadapter( listadapter ); layout.addview(mainlistview); popup.setcontentview(layout); popup.setoutsidetouchable(true); popup.showatlocation(rlmain, gravity.no_gravity, 10, 10); popup.update((int)x,(int)y, 300, 80); } }); } grab (exception e) { e.printstacktrace(); } }

nullpointerexception thrown @ line:

mainlistview.setadapter( listadapter );

it returns null. why that?

probably calling early. need phone call after

setcontentview(r.layout.somelayout);

is called. setcontentview method should called before start initialising widgets, after phone call parent's constructor.

update:

so in case need set linearlayout contentview before want initialise widget in case listview.

my suggestion initialise linearlayout in oncreate() method.

public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.yourlinearlayout); // must called first listview list = findviewbyid(r.id.menu_objoptions); // should works. }

android android-layout

No comments:

Post a Comment