java - Android - how to programmatically add and populate spinners? -


i have been looking quite time on web efficient , clean way of programmatically adding elements views in general in android i've never quite found way trying do. as want use recommended ways of working (defining layouts in xml files) there limitations explain in next part.

here's trying achieve. have activity displays default view (setcontentview called in overwritten oncreate method).

i need able display several "pop-up" style messages, i've read, there 2 ways that, popups , dialogfragments. latter seems more appropriate me have specific customization in dialogfragment (which class separated activity extending dialogfragment).

now, defined simple linear layout in xml document dialog fragment catch is, need add spinners it, , never know in advance how many need add (hence, can't define spinners manually in xml file).

i've read bit inflation understand, merely instantiates view becomes "visible" , "manipulable" @ runtime code seem taken in account. (the view doesn't display spinners when show method invoked).

activity class:

public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);      dbswipefm = getsupportfragmentmanager();     drawview = new drawingview(this,dbutils);              [...]     setcontentview(drawview);      drawview.requestfocus();  }  public void showcolumnselectiondialogfragment(arraylist<shape> shapescoltoshow){     new columnselectiondialog().show(dbswipefm, "fragment_edit_name"); } 

the showcolumnselectiondialogfragment method invoked class.

the columnselectiondialog class [edit-last version]:

@override public view oncreateview(layoutinflater inflater, viewgroup container,         bundle savedinstancestate) {     //view view = inflater.inflate(r.layout.fragment_edit_name, container);     view view = new linearlayout(getactivity());      dbutils dbmanager = dbutils.get();      //to count pairs     int paircount = 0;      linearlayout horizontallayoutfortables = new linearlayout(view.getcontext()),                  horizontallayoutforcols = new linearlayout(view.getcontext());      //set layout horizontal     horizontallayoutfortables.setorientation(linearlayout.horizontal);     horizontallayoutfortables.setlayoutparams(new linearlayout.layoutparams(linearlayout.layoutparams.wrap_content, linearlayout.layoutparams.wrap_content));      horizontallayoutforcols.setorientation(linearlayout.horizontal);     horizontallayoutforcols.setlayoutparams(new linearlayout.layoutparams(linearlayout.layoutparams.wrap_content, linearlayout.layoutparams.wrap_content));      arraylist<shape> dbmanagercurrentlyselectedtables = dbmanager.getcurrentrequestselectedtables();      arraylist<string> allavailabletables = new arraylist<string>();      //((linearlayout) view).addview(new textview(view.getcontext()));     //get names of table elements     for(int k =0; k < dbmanager.getcurrentrequestselectedtables().size(); k++){         allavailabletables.add(dbmanager.getcurrentrequestselectedtables().get(k).getdbelement().getelementname());     }      for(int = 0; < dbmanager.getcurrentrequestselectedtables().size(); i++){         if(paircount >= 1){             system.out.println("adding layouts view");             ((linearlayout) view).addview(horizontallayoutfortables);             ((linearlayout) view).addview(horizontallayoutforcols);             horizontallayoutfortables = new linearlayout(view.getcontext());             horizontallayoutforcols = new linearlayout(view.getcontext());             paircount = 0;         }         //create new spinner containing tables         spinner tablespinner = new spinner(view.getcontext());         tablespinner.setadapter(new selectiondialogspinneradapter(allavailabletables));          //create corresponding spinner columns of current table only.         spinner tablecolumnspinner = new spinner(view.getcontext());         arraylist<string> columnnamesonly = new arraylist<string>();//get column names spinner         for(int j = 0; j < dbmanagercurrentlyselectedtables.get(i).getdbelement().getcolumns().size(); j++){             columnnamesonly.add(dbmanagercurrentlyselectedtables.get(i).getdbelement().getcolumns().get(j).getcolumnname());         }         tablecolumnspinner.setadapter(new selectiondialogspinneradapter(columnnamesonly));          //add layout         system.out.println("adding spinners layout");         horizontallayoutfortables.addview(tablespinner);         horizontallayoutforcols.addview(tablecolumnspinner);          paircount++;     }      //view = inflater.inflate(r.layout.fragment_edit_name, container);      getdialog().settitle(r.string.joinselecttitle);      //view.invalidate();      this.view = view;            return view; } 

this method : getcurrentrequestselectedtables().size(); return varying size results depending on end-user interaction.

the view merely displays title now. thinking, better create brand new activity view , invoke intent current activity ? or there way create view on fly (how pass context activity instantiate it?) , add spinners programmatically.

thank you. [edit]: note : linear layouts created inside dialogfragment must programmatically added. xml :

<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/joinselectmod"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_gravity="center"     android:orientation="vertical" >  </linearlayout> 

change oncreateview this:

@override public view oncreateview(layoutinflater inflater, viewgroup container,     bundle savedinstancestate) {  view view = inflater.inflate(r.layout.fragment_layout_id, container);  linearlayout viewlayout = (linearlayout) view.findviewbyid(r.layout.fragment_edit_name);   linearlayout.layoutparams llp = new linearlayout.layoutparams(         linearlayout.layoutparams.wrap_content,         linearlayout.layoutparams.wrap_content);  dbutils dbmanager = dbutils.get();  arraylist<shape> dbmanagercurrentlyselectedtables = dbmanager.getcurrentrequestselectedtables();  arraylist<string> allavailabletables = new arraylist<string>();  //get names of table elements for(int k =0; k < dbmanager.getcurrentrequestselectedtables().size(); k++){     allavailabletables.add(dbmanager.getcurrentrequestselectedtables().get(k).getdbelement().getelementname()); }  for(int = 0; < dbmanager.getcurrentrequestselectedtables().size(); i++){     if(i % 2 == 0){         linearlayout horizontallayoutfortables = new linearlayout(view.getcontext()),              horizontallayoutforcols = new linearlayout(view.getcontext());  //set layout horizontal         horizontallayoutfortables.setorientantion(linearlayout.horizontal);         horizontallayoutforcols.setorientantion(linearlayout.horizontal);          viewlayout.addview(horizontallayoutfortables);         viewlayout.addview(horizontallayoutforcols);          paircount = 0;     }     //create new spinner containing tables     spinner tablespinner = new spinner(view.getcontext());     tablespinner.setadapter(new selectiondialogspinneradapter(allavailabletables));      //create corresponding spinner columns of current table only.     spinner tablecolumnspinner = new spinner(view.getcontext());     arraylist<string> columnnamesonly = new arraylist<string>();//get column names spinner     for(int j = 0; j < dbmanagercurrentlyselectedtables.get(i).getdbelement().getcolumns().size(); j++){         columnnamesonly.add(dbmanagercurrentlyselectedtables.get(i).getdbelement().getcolumns().get(j).getcolumnname());     }     tablecolumnspinner.setadapter(new selectiondialogspinneradapter(columnnamesonly));      //add layout     horizontallayoutfortables.addview(tablespinner, llp);     horizontallayoutforcols.addview(tablecolumnspinner, llp);   }   getdialog().settitle(r.string.joinselecttitle);  return view; 

}

update: include code set view parameters when put inside new linearlayout


Comments

Popular posts from this blog

javascript - DIV "hiding" when changing dropdown value -

node.js - Node - Passport Auth - Authed Post Route hangs on form submission -

Does Firefox offer AppleScript support to get URL of windows? -