Wednesday 15 August 2012

(Android) Why the text of my Edittext is reseted when I change tab on actionbar? -



(Android) Why the text of my Edittext is reseted when I change tab on actionbar? -

it's first post in forum. firstly, sorry english.

i'm developing application uses 4 tabs in action bar. app send messages device via bluetooth. selected parts more importants of code here.

so, 3rd tab uses 3 seekbars configure message sent. first seekbar command how many lines message has. second, seekbar command time of exhibition , lastly command how many messages sent.

in 4th tab there 5 buttons showed according messages number selected in tab 3. when each button selected, corresponding lines of each message showed according number of lines selected in tab 3. each line showed edittext.

when write in edtittext in tab 4 alter tab 3, after, comeback tab 4. texts there wrote, when alter tabr 2 or tab 1, comeback tab 4, texts of messages 2, 3, 4 , 5 disappeared. necessary emphasize text of message 1 continues intact.

i believe, happening because i'm instantiating linhas[i][j] new edittext within oncreateview, i'm not sure. when did seek instantiate in oncreate , after changed tab 4, app close exception.

public class trafeg extends fragmentactivity

implements actionbar.tablistener{

static bluetoothadapter adaptador = bluetoothadapter.getdefaultadapter(); //configura um adaptador static bluetoothdevice bt_device=null; static bluetoothsocket btssocket = null; sectionspageradapter msectionspageradapter; public static context context; public static context c; public static edittext cx_txt_tx; public static button bt_alterar; public static button bt_enviar; public static radiobutton automatico; public static radiobutton economico; public static radiobutton maximo; public static button btnbt; public static edittext etbt; public static progressbar progresso; public static textview tv_linhas; public static textview tv_colunas; public static textview tv_orient; public byte[] buf= new byte[1]; public static boolean dado_1=true; public static boolean flag_inicio=false; public static boolean flag_fim=false; public static boolean sucess=false; public static boolean flag_orient=true; public static boolean flag_conect=false; public static boolean flag_dev1=true; public static boolean repeat=false; public static boolean conect_sucess=false; public static outputstream outstream = null; public static inputstream instream = null; public static string rx_str="!"; public static string ns=null; public static string serial_number=null; public static string devaddress=null; public static string orient="h"; public static string linhas_str="1"; public static string colunas_str="1"; public static string brilho="e"; public static string estado= "conectar"; public static string nome; public static string teste_str=null; static private final string tag = "bts"; private static final uuid my_uuid = uuid.fromstring("00001101-0000-1000-8000-00805f9b34fb"); //uuid default hc-05 private static int n_colunas=1; private static int n_linhas=1; private static int qtlinhas = 4; // quantidade de objetos edittext criados private static int linhasen = 1; // quantidade de linhas habilitadas private static int periodo = 1; // período entre quadros private static int qtquadros = 5; // quantidade total de quadros public static int quadrosen = 1; // quantidade de quadros habilitados private static int quadro = 0; // quadro habilitado private static edittext[][] linhas = new edittext[qtquadros+1][qtlinhas+1]; private static linearlayout lllinhas[] = new linearlayout[qtquadros]; private static textview tvquadro; public static button btquadro[] = new button[5]; public static view rootview_configtext; public static view rootview_edittext; viewpager mviewpager; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //toast.maketext(this, "oncreate", 0).show(); //vincula variáveis ao layout. setcontentview(r.layout.main_activity); // inicializa action bar final actionbar actionbar = getactionbar(); actionbar.setnavigationmode(actionbar.navigation_mode_tabs); actionbar.sethomebuttonenabled(true); actionbar.setdisplayshowhomeenabled(false); actionbar.setdisplayuselogoenabled(true); actionbar.setdisplayshowtitleenabled(false); c=this; /*for(int i=1;i<qtquadros;i++) { for(int j=0;j<qtlinhas;j++) { linhas[i][j] = new edittext(c); } }*/ // fixa orientação em retrato setrequestedorientation(activityinfo.screen_orientation_portrait); // instancia o adaptador que irá retornar um fragmento para cada uma das 4 // páginas aplicativo msectionspageradapter = new sectionspageradapter(getsupportfragmentmanager()); // inicializa viewpager mviewpager = (viewpager) findviewbyid(r.id.pager); mviewpager.setadapter(msectionspageradapter); //listener que verifica quando houve mudança de página mviewpager .setonpagechangelistener(new viewpager.simpleonpagechangelistener() { @override public void onpageselected(int position) { //posiciona action bar na tab que foi selecionada actionbar.setselectednavigationitem(position); } }); // para cada uma das seções aplicativo, adiciona uma tab na action bar (int = 0; < msectionspageradapter.getcount(); i++) { // cria uma tab com o título correspondente ao titulo da pagina definido pelo adaptador actionbar.addtab(actionbar.newtab() .settext(msectionspageradapter.getpagetitle(i)) .settablistener(this)); } //verifica se o bluetooth está desativado if(!adaptador.isenabled()) { intent enablebluetooth = new intent(bluetoothadapter.action_request_enable); startactivityforresult(enablebluetooth, 0); //chama função que pergunta ao usuário se ele quer //ativar o bluetooth de seu telefone } mviewpager.setcurrentitem(1); //posiciona aplicação na tab main } public class sectionspageradapter extends fragmentpageradapter { public sectionspageradapter(fragmentmanager fm) { super(fm); } @override public fragment getitem(int position) { //esse método é chamado para instanciar fragment com página correspondente position fragment fragment = new fragment(); switch (position) { case 0: fragment = new configfragment(); break; case 1: fragment = new mainfragment(); break; case 2: fragment = new configtext(); break; case 3: fragment = new editfragment(); break; default: break; } bundle args = new bundle(); args.putint(configfragment.arg_section_number, position + 1); fragment.setarguments(args); //retorna fragment homecoming fragment; } @override public int getcount() { // quantidade de telas homecoming 4; } @override public charsequence getpagetitle(int position) { //retorna o título de cada tab switch (position) { case 0: homecoming "config.\ncontrol."; case 1: homecoming "main"; case 2: homecoming "config.\n txt."; case 3: homecoming "edit.\ntxt"; } homecoming null; } } //tab1 public static class configfragment extends fragment implements onseekbarchangelistener { /** * cria página de configuração da controladora */ public static final string arg_section_number = "section_number"; //private radiogroup radiolinhas; private view rootview; public configfragment() { } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { rootview = inflater.inflate(r.layout.config_controladora_fragment, container, false); bt_alterar = (button)rootview.findviewbyid(r.id.alterar); bt_enviar = (button)rootview.findviewbyid(r.id.enviar); automatico=(radiobutton)rootview.findviewbyid(r.id.auto); economico=(radiobutton)rootview.findviewbyid(r.id.econ); maximo=(radiobutton)rootview.findviewbyid(r.id.max); seekbar sbcolunas = (seekbar) rootview.findviewbyid(r.id.sb_colunas); seekbar sblinhas = (seekbar) rootview.findviewbyid(r.id.sb_linhas); tv_colunas= (textview) rootview.findviewbyid(r.id.ed_colunas); tv_linhas= (textview) rootview.findviewbyid(r.id.ed_linhas); tv_orient= (textview) rootview.findviewbyid(r.id.ed_orient); //limita o progresso máximo das barras em 4 e inicializa-os em 1. sblinhas.setmax(4); sblinhas.setprogress(1); sbcolunas.setmax(4); sbcolunas.setprogress(1); if(orient.equals("h"))tv_orient.settext("orientação: hori. "); else if(orient.equals("v")) tv_orient.settext("orientação: vert. "); tv_linhas.settext("nº de linhas: "+linhas_str); tv_colunas.settext("nº de colunas: "+colunas_str); homecoming rootview; } @override public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) { // todo auto-generated method stub } @override public void onstarttrackingtouch(seekbar seekbar) { // todo auto-generated method stub } @override public void onstoptrackingtouch(seekbar seekbar) { // todo auto-generated method stub } } //tab 2 public static class mainfragment extends fragment { /** * cria página main */ public static final string arg_section_number = "section_number"; public mainfragment() { } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { rootview_edittext = inflater.inflate(r.layout.main_fragment, container, false); progresso = (progressbar) rootview_edittext.findviewbyid(r.id.progressbar1); progresso.setvisibility(view.invisible); etbt = (edittext) rootview_edittext.findviewbyid(r.id.bluetooth_et); btnbt = (button) rootview_edittext.findviewbyid(r.id.bt_button); btnbt.settext(estado); btnbt.setonclicklistener(new onclicklistener()//viewviewview { @override public void onclick(view v) { conect_sucess=false; repeat=false; } }); homecoming rootview_edittext; } } //tab3 public static class configtext extends fragment implements onseekbarchangelistener { /** * cria página de configuração de texto */ public static final string arg_section_number = "section_number"; //private radiogroup radiolinhas; private textview tvquadros, tvlinhas, tvperiodo; public configtext() { } @override //listener das seekbar public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) { //se seekbar correspondente ao período if(seekbar.getid() == r.id.sb_periodo) { //força o progresso em 1, no caso progresso ser menor que 1 if(progress < 1) seekbar.setprogress(1); //se o progresso não menor que 1, o período recebe o progresso else periodo = progress; tvperiodo.settext(integer.tostring(seekbar.getprogress()) + " s"); //escreve o período selecionado no layout } //se seekbar correspondente ao número de quadros else if(seekbar.getid() == r.id.sb_quadros) { //força o progresso em 1, no caso progresso ser menor que 1 if(progress < 1) { seekbar.setprogress(1); progress=1; } //se o progresso não menor que 1, o múmero de quadros recebe o progresso quadrosen = progress; //escreve o número de quadros selecionado no layout tvquadros.settext(integer.tostring(seekbar.getprogress())); if(btquadro[0] != null) { //verifica se o número de quadros não é nulo for(int i=0; i<qtquadros; i++) { //log.d("quadro (557)", integer.tostring(i)); //torna visível quantidade de quadros selecionados if(i < quadrosen) btquadro[i].setvisibility(view.visible); else btquadro[i].setvisibility(view.invisible); } } } //se seekbar correspondente ao número de linhas else if(seekbar.getid() == r.id.sb_linhas) { //força o progresso em 1, no caso progresso ser menor que 1 if(progress < 1) seekbar.setprogress(1); //se o progresso não menor que 1, o múmero de linhas recebe o progresso else linhasen = progress; //escreve o número de linhas selecionado no layout tvlinhas.settext(integer.tostring(seekbar.getprogress())); //chama função que desenha linhas if(linhas[0][0] != null) desenhalinhas(); } } @override public void onstarttrackingtouch(seekbar seekbar) { } @override public void onstoptrackingtouch(seekbar seekbar) { } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { rootview_configtext = inflater.inflate(r.layout.config_text_fragmente, container, false); tvperiodo = (textview) rootview_configtext.findviewbyid(r.id.textview02); tvquadros = (textview) rootview_configtext.findviewbyid(r.id.textview03); tvlinhas = (textview) rootview_configtext.findviewbyid(r.id.textview05); seekbar sbperiodo = (seekbar) rootview_configtext.findviewbyid(r.id.sb_periodo); seekbar sbquadros = (seekbar) rootview_configtext.findviewbyid(r.id.sb_quadros); seekbar sblinhas = (seekbar) rootview_configtext.findviewbyid(r.id.sb_linhas); //víncula variáveis elementos layout sbperiodo.setonseekbarchangelistener(this); sbquadros.setonseekbarchangelistener(this); sblinhas.setonseekbarchangelistener(this); //listener das seekbar //seta progresso default e progresso máximo para cada seekbar sbperiodo.setmax(5); sbperiodo.setprogress(periodo); sblinhas.setmax(4); sblinhas.setprogress(linhasen); sbquadros.setmax(5); sbquadros.setprogress(quadrosen); homecoming rootview_configtext; //retorna página criada } } //tab4 public static class editfragment extends fragment { /** * cria apágina de edição de texto */ public static final string arg_section_number = "section_number"; private view rootview; public editfragment() { } public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { rootview = inflater.inflate(r.layout.edit_fragment, container, false); //víncula variáveis elementos layout linhas[0][0] = (edittext) rootview.findviewbyid(r.id.linha01); linhas[0][1] = (edittext) rootview.findviewbyid(r.id.linha02); linhas[0][2] = (edittext) rootview.findviewbyid(r.id.linha03); linhas[0][3] = (edittext) rootview.findviewbyid(r.id.linha04); lllinhas[0] = (linearlayout) rootview.findviewbyid(r.id.linearlayout1); lllinhas[1] = (linearlayout) rootview.findviewbyid(r.id.linearlayout01); lllinhas[2] = (linearlayout) rootview.findviewbyid(r.id.linearlayout02); lllinhas[3] = (linearlayout) rootview.findviewbyid(r.id.linearlayout03); lllinhas[4] = (linearlayout) rootview.findviewbyid(r.id.linearlayout04); //inicializa um novo context context context = rootview.getcontext(); tvquadro = (textview) rootview.findviewbyid(r.id.textview06); tvquadro.settext("quadro " + integer.tostring(quadro+1)); //lllinhas[quadro].setvisibility(view.visible); //log.e("aaa",integer.tostring(quadro)); layoutparams lplinhas[] = new layoutparams[4]; for(int i=0; i<qtlinhas; i++) lplinhas[i] = new layoutparams(linhas[0][i].getlayoutparams()); for(int i=0; i<qtlinhas; i++) { linhas[0][i].setinputtype(inputtype.type_class_text | inputtype.type_text_variation_normal); linhas[0][i].setimeoptions(editorinfo.ime_action_next); } for(int i=1; i<qtquadros; i++) { //log.d("qtquadros", integer.tostring(qtquadros)); for(int j=0; j<qtlinhas; j++) { linhas[i][j] = new edittext(c); linhas[i][j].setlayoutparams(lplinhas[j]); linhas[i][j].sethint(linhas[0][j].gethint()); linhas[i][j].setinputtype(inputtype.type_class_text | inputtype.type_text_variation_normal); linhas[i][j].setimeoptions(editorinfo.ime_action_next); //linhas[i][j].settext(teste_str); lllinhas[i].addview(linhas[i][j]); } lllinhas[i].setlayoutparams(lllinhas[0].getlayoutparams()); lllinhas[i].setvisibility(view.invisible); } button buttonsend = (button) rootview.findviewbyid(r.id.button_send); button buttonclean = (button) rootview.findviewbyid(r.id.button_clean); btquadro[0] = (button) rootview.findviewbyid(r.id.bt_button); btquadro[1] = (button) rootview.findviewbyid(r.id.button2); btquadro[2] = (button) rootview.findviewbyid(r.id.button3); btquadro[3] = (button) rootview.findviewbyid(r.id.button4); btquadro[4] = (button) rootview.findviewbyid(r.id.button5); btquadro[quadro].setbackgroundcolor(color.argb(100, 36, 173, 89)); for(int i=1; i<qtquadros; i++) { if(i<quadrosen) btquadro[i].setvisibility(view.visible); else btquadro[i].setvisibility(view.gone); } desenhalinhas(); lllinhas[quadro].setvisibility(view.visible); onclicklistener ocl = new onclicklistener() { @override public void onclick(view v) { v.setbackgroundcolor(color.argb(100, 36, 173, 89)); lllinhas[quadro].setvisibility(view.invisible); for(int i=0; i<qtquadros; i++) { if(v.getid() == btquadro[i].getid()) quadro = i; else btquadro[i].setbackgroundcolor(color.transparent); //log.d("(763)","quadro=i"); } tvquadro.settext("quadro " + integer.tostring(quadro+1)); desenhalinhas(); lllinhas[quadro].setvisibility(view.visible); } }; for(int i=0; i<qtquadros; i++) btquadro[i].setonclicklistener(ocl); buttonclean.setonclicklistener(new onclicklistener() { public void onclick(view v) { for(int i=0; i<qtquadros; i++) { for(int j=0; j<qtlinhas; j++) { linhas[i][j].settext(""); } } } }); buttonsend.setonclicklistener(new onclicklistener() { public void onclick(view v) { string buffer = "{"; for(int i=0; i<quadrosen; i++) { for(int j=0; j<linhasen; j++) { if(j != 0) buffer += "\n"; if(linhas[i][j].gettext().length() != 0) { buffer += linhas[i][j].gettext().tostring(); } } buffer += "\t"; buffer += integer.tostring(periodo); } buffer += "}"; } }); homecoming rootview; } } @override public void ontabselected(tab tab, fragmenttransaction ft) { mviewpager.setcurrentitem(tab.getposition()); // todo auto-generated method stub } @override public void ontabunselected(tab tab, fragmenttransaction ft) { /*for(int i=1;i<qtquadros;i++) { for(int j=0;j<qtlinhas;j++) { teste_str=linhas[i][j].gettext().tostring(); //else teste_str= (linhas[i][j].gettext().tostring())+"aaaa"; //teste_str="testando"; } }*/ } @override public void ontabreselected(tab tab, fragmenttransaction ft) { // todo auto-generated method stub } public static void desenhalinhas() { for(int i=0; i<qtlinhas; i++) { if(i < linhasen) linhas[quadro][i].setvisibility(view.visible); else linhas[quadro][i].setvisibility(view.invisible); //log.d("linhasen",integer.tostring(linhasen)); } }

}

the xml corresponding of tab 4 here. other xmlns not here because characters limit.

tab 4

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:android1="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" android1:gravity="center" tools:context=".g4bluetooth" > <button android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:layout_alignright="@+id/linearlayout1" android:layout_marginbottom="10dp" android:text="enviar" /> <button android:id="@+id/button_clean" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignbaseline="@+id/button_send" android:layout_alignbottom="@+id/button_send" android:layout_alignleft="@+id/linearlayout1" android:text="limpar" /> <linearlayout android1:id="@+id/linearlayout2" android1:layout_width="wrap_content" android1:layout_height="wrap_content" android1:layout_above="@+id/button_send" android1:layout_alignleft="@+id/button_clean" android1:layout_alignright="@+id/button_send" android1:layout_marginbottom="10dp" android1:orientation="horizontal" > <button android1:id="@+id/bt_button" style="?android:attr/buttonstylesmall" android1:layout_width="wrap_content" android1:layout_height="match_parent" android1:background="@android:color/transparent" android1:text="1" /> <button android1:id="@+id/button2" style="?android:attr/buttonstylesmall" android1:layout_width="wrap_content" android1:layout_height="match_parent" android1:background="@android:color/transparent" android1:text="2" /> <button android1:id="@+id/button3" style="?android:attr/buttonstylesmall" android1:layout_width="wrap_content" android1:layout_height="match_parent" android1:background="@android:color/transparent" android1:text="3" /> <button android1:id="@+id/button4" style="?android:attr/buttonstylesmall" android1:layout_width="wrap_content" android1:layout_height="match_parent" android1:background="@android:color/transparent" android1:text="4" /> <button android1:id="@+id/button5" style="?android:attr/buttonstylesmall" android1:layout_width="wrap_content" android1:layout_height="match_parent" android1:background="@android:color/transparent" android1:text="5" /> </linearlayout> <linearlayout android1:id="@+id/linearlayout1" android1:layout_width="wrap_content" android1:layout_height="wrap_content" android1:layout_alignparentleft="true" android1:layout_alignparentright="true" android1:layout_alignparenttop="true" android1:layout_margin="10dp" android1:layout_marginleft="10dp" android1:layout_margintop="10dp" android1:orientation="vertical" > <edittext android1:id="@+id/linha01" android1:layout_width="fill_parent" android1:layout_height="wrap_content" android1:ems="10" android1:hint="linha 1" android1:maxlength="64" android1:minlines="1" android1:visibility="invisible" /> <edittext android1:id="@+id/linha02" android1:layout_width="fill_parent" android1:layout_height="wrap_content" android1:hint="linha 2" android1:maxlength="64" android1:minlines="1" android1:visibility="invisible" /> <edittext android1:id="@+id/linha03" android1:layout_width="fill_parent" android1:layout_height="wrap_content" android1:hint="linha 3" android1:maxlength="64" android1:minlines="1" android1:visibility="invisible" /> <edittext android1:id="@+id/linha04" android1:layout_width="fill_parent" android1:layout_height="wrap_content" android1:hint="linha 4" android1:maxlength="64" android1:minlines="1" android1:visibility="invisible" /> </linearlayout> <linearlayout android1:id="@+id/linearlayout01" android1:layout_width="wrap_content" android1:layout_height="wrap_content" android1:layout_alignparenttop="true" android1:layout_centerhorizontal="true" android1:orientation="vertical" > </linearlayout> <linearlayout android1:id="@+id/linearlayout02" android1:layout_width="wrap_content" android1:layout_height="wrap_content" android1:layout_alignparenttop="true" android1:layout_centerhorizontal="true" android1:orientation="vertical" > </linearlayout> <linearlayout android1:id="@+id/linearlayout03" android1:layout_width="wrap_content" android1:layout_height="wrap_content" android1:layout_alignparenttop="true" android1:layout_centerhorizontal="true" android1:orientation="vertical" > </linearlayout> <linearlayout android1:id="@+id/linearlayout04" android1:layout_width="wrap_content" android1:layout_height="wrap_content" android1:layout_alignparenttop="true" android1:layout_centerhorizontal="true" android1:orientation="vertical" > </linearlayout> <textview android1:id="@+id/textview06" android1:layout_width="wrap_content" android1:layout_height="wrap_content" android1:layout_alignbaseline="@+id/button_clean" android1:layout_alignbottom="@+id/button_clean" android1:layout_centerhorizontal="true" android1:text="quadro 1" />

viewpager instantiate maximum 3 views or fragments. it's recycle container set new view/fragment. illustration when in 2nd page 1st , 3rd views/fragment instantiate. workaround maintain instance of fragment on adapter or utilize viewpager.setoffscreenpagelimit(int) increment maximum viewpager views/fragments instantiation

android tabs android-edittext android-actionbar

No comments:

Post a Comment