java - Get View when using fragments -
i trying 'view' of layout. need create button listeners , such clueless on way this. also, using 'viewpager' host tabs, , using layout fragments. code have, hope don't need more that. if do, ask me it.
here's code:
package net.dankrushen.filetosms; import android.app.dialog; import android.support.design.widget.tablayout; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.toolbar; import android.support.v4.app.fragment; import android.support.v4.app.fragmentmanager; import android.support.v4.app.fragmentpageradapter; import android.support.v4.view.viewpager; import android.os.bundle; import android.telephony.smsmanager; import android.view.layoutinflater; import android.view.menu; import android.view.menuitem; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.arrayadapter; import android.widget.button; import android.widget.edittext; import android.widget.listview; import android.widget.progressbar; import android.widget.textview; import android.widget.toast; import net.qwertysam.codec.byteutil; import net.qwertysam.percentage.tasks; import java.io.file; import java.text.simpledateformat; import java.util.arraylist; import java.util.calendar; import java.util.list; import java.util.concurrent.timeunit; public class mainactivity extends appcompatactivity { private static mainactivity instance; public static mainactivity instance(){ return instance; } private button buttonopendialog; private button buttonup; private textview textfolder; private textview fileselected; private string sell = "null"; private button senddata; private textview percentage; private progressbar progressbar; private textview taskdisplay; private edittext phonenum; private boolean isrunning = false; //file chooser dialog private static final int custom_dialog_id = 0; private listview dialog_listview; private file root; private file curfolder; private list<string> filelist = new arraylist<>(); /** * {@link android.support.v4.view.pageradapter} provide * fragments each of sections. use * {@link fragmentpageradapter} derivative, keep every * loaded fragment in memory. if becomes memory intensive, * may best switch * {@link android.support.v4.app.fragmentstatepageradapter}. */ private sectionspageradapter msectionspageradapter; /** * {@link viewpager} host section contents. */ private viewpager mviewpager; public void setpercentage(final tasks task, final int percent) { this.runonuithread(new thread() { public void run() { percentage.settext(percent + "%"); progressbar.setprogress(percent); taskdisplay.settext(task.title() + " (" + task.gettasknum() + "/" + task.gettotaltasknum() + ")"); } }); } public void setprocessing(final boolean visible){ this.runonuithread(new thread() { public void run() { percentage.setvisibility(visible ? view.visible : view.invisible); taskdisplay.setvisibility(visible ? view.visible : view.invisible); progressbar.setvisibility(visible ? view.visible : view.invisible); } }); } @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); // create adapter return fragment each of 3 // primary sections of activity. msectionspageradapter = new sectionspageradapter(getsupportfragmentmanager()); // set viewpager sections adapter. mviewpager = (viewpager) findviewbyid(r.id.container); mviewpager.setadapter(msectionspageradapter); tablayout tablayout = (tablayout) findviewbyid(r.id.tabs); tablayout.setupwithviewpager(mviewpager); view nice = placeholderfragment.newinstance(0).getview(); buttonopendialog = (button) nice.findviewbyid(r.id.opendialog); buttonopendialog.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { showdialog(custom_dialog_id); } }); progressbar = (progressbar) nice.findviewbyid(r.id.progressbar); percentage = (textview) nice.findviewbyid(r.id.percentage); taskdisplay = (textview) nice.findviewbyid(r.id.curproc); phonenum = (edittext) nice.findviewbyid(r.id.phonenum); setpercentage(tasks.idle, 0); setprocessing(false); root = new file("/storage/"); curfolder = root; senddata = (button) nice.findviewbyid(r.id.send); senddata.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { if (!isrunning) { if (!sell.equals("null")) { if (!phonenum.gettext().tostring().replaceall("\\d+", "").isempty() && phonenum.gettext() != null) { warningdialog(); } else { toast.maketext(mainactivity.this, "please enter phone number!", toast.length_short).show(); } } else { toast.maketext(mainactivity.this, "please select file!", toast.length_short).show(); } } else { toast.maketext(mainactivity.this, "please wait current process finish!", toast.length_short).show(); } } }); } private void warningdialog(){ // custom dialog final dialog dialog = new dialog(mainactivity.this); dialog.setcontentview(r.layout.dialogwarn); dialog.settitle("details"); textview warntxtfile = (textview) dialog.findviewbyid(r.id.warntxtfile); warntxtfile.settext(fileselected.gettext()); textview warntxtbytes = (textview) dialog.findviewbyid(r.id.warntxtbytes); file sellect = new file(sell); warntxtbytes.settext(string.valueof(sellect.length()) + " bytes"); textview warntxtmessages = (textview) dialog.findviewbyid(r.id.warntxtmessages); double massages = math.ceil(sellect.length()/105)+3; double messagesnum = (massages == 3 ? massages + 1 : massages); warntxtmessages.settext(string.format("%.0f", messagesnum).replace(".0", "") + " messages"); double processtime = math.ceil((sellect.length() * 0.0000006353240152) + 1)-1; double fulltime = processtime + messagesnum; textview warntxtesttime = (textview) dialog.findviewbyid(r.id.warntxtesttime); warntxtesttime.settext(gettime((long) fulltime)); button cnclbtn = (button) dialog.findviewbyid(r.id.cancelbtn); // if button clicked, close custom dialog cnclbtn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { dialog.dismiss(); } }); button contbtn = (button) dialog.findviewbyid(r.id.continuebtn); // if button clicked, close custom dialog contbtn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { toast.maketext(mainactivity.this, "converting file...", toast.length_short).show(); isrunning = true; byteprocessor(); dialog.dismiss(); } }); dialog.show(); } @override protected dialog oncreatedialog(int id) { dialog dialog = null; switch (id) { case custom_dialog_id: dialog = new dialog(mainactivity.this); dialog.setcontentview(r.layout.dialoglayout); dialog.settitle("file chooser"); dialog.setcancelable(true); dialog.setcanceledontouchoutside(true); textfolder = (textview) dialog.findviewbyid(r.id.folder); buttonup = (button) dialog.findviewbyid(r.id.up); buttonup.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { listdir(curfolder.getparentfile()); } }); dialog_listview = (listview) dialog.findviewbyid(r.id.dialoglist); dialog_listview.setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { file selected = new file(filelist.get(position)); if (selected.isdirectory()) { listdir(selected); } else { fileselected = (textview) findviewbyid(r.id.fileselected); fileselected.settext(selected.getname()); sell = selected.tostring(); toast.maketext(mainactivity.this, selected.tostring() + " selected", toast.length_long).show(); dismissdialog(custom_dialog_id); } } }); break; } return dialog; } @override protected void onpreparedialog(int id, dialog dialog) { super.onpreparedialog(id, dialog); switch (id) { case custom_dialog_id: listdir(curfolder); break; } } private void listdir(file f) { if (f.equals(root)) { buttonup.setenabled(false); } else { buttonup.setenabled(true); } curfolder = f; textfolder.settext(f.getpath()); file[] files = f.listfiles(); filelist.clear(); (file file : files) { if(file.length() != 0) { filelist.add(file.getpath()); } } arrayadapter<string> directorylist = new arrayadapter<>(this, android.r.layout.simple_list_item_1, filelist); dialog_listview.setadapter(directorylist); } private void byteprocessor() { setprocessing(true); new thread() { public void run() { list<string> encoded = byteutil.splitintosendables(byteutil.encodebytes(byteutil.bytesfromfile(sell))); smsmanager sms = smsmanager.getdefault(); string phonenumber = phonenum.gettext().tostring().replaceall("\\d+", ""); system.out.println("sending messages: " + encoded.size()); file sellect = new file(sell); calendar cal = calendar.getinstance(); simpledateformat sdf = new simpledateformat("hh:mm:ss"); system.out.println( sdf.format(cal.gettime()) ); string firstmessage = "<(<(||\"" + fileselected.gettext() + "\"," + sellect.length() + " bytes," + encoded.size() + " message(s)," + sdf.format(cal.gettime()) + "||"; for(string sendable : splitstringevery(firstmessage, 140)) { sms.sendtextmessage(phonenumber, null, sendable, null, null); } (string tosend : encoded) { system.out.println("sending message: " + tosend); sms.sendtextmessage(phonenumber, null, tosend, null, null); } sms.sendtextmessage(phonenumber, null, "||)>)>", null, null); isrunning = false; } }.start(); setprocessing(false); } public string gettime(long seconds){ int days = (int) timeunit.seconds.todays(seconds); long hours = timeunit.seconds.tohours(seconds) - (days *24); long minute = timeunit.seconds.tominutes(seconds) - (timeunit.seconds.tohours(seconds)* 60); long second = timeunit.seconds.toseconds(seconds) - (timeunit.seconds.tominutes(seconds) *60); return (days == 0 ? "" : days + "d ") + (hours == 0 ? "" : hours + "h ") + (minute == 0 ? "" : minute + "m ") + (second == 0 ? "" : second + "s"); } public string[] splitstringevery(string s, int interval) { int arraylength = (int) math.ceil(((s.length() / (double)interval))); string[] result = new string[arraylength]; int j = 0; int lastindex = result.length - 1; (int = 0; < lastindex; i++) { result[i] = s.substring(j, j + interval); j += interval; } //add last bit result[lastindex] = s.substring(j); return result; } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } /** * placeholder fragment containing simple view. */ public static class placeholderfragment extends fragment { /** * fragment argument representing section number * fragment. */ private static final string arg_section_number = "section_number"; public placeholderfragment() { } /** * returns new instance of fragment given section * number. */ public static placeholderfragment newinstance(int sectionnumber) { placeholderfragment fragment = new placeholderfragment(); bundle args = new bundle(); args.putint(arg_section_number, sectionnumber); fragment.setarguments(args); return fragment; } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { int sectionnum = getarguments().getint(arg_section_number); view rootview = (sectionnum == 1 ? inflater.inflate(r.layout.sendfragment, container, false) : inflater.inflate(r.layout.receivefragment, container, false)); return rootview; } } /** * {@link fragmentpageradapter} returns fragment corresponding * 1 of sections/tabs/pages. */ public class sectionspageradapter extends fragmentpageradapter { public sectionspageradapter(fragmentmanager fm) { super(fm); } @override public fragment getitem(int position) { // getitem called instantiate fragment given page. // return placeholderfragment (defined static inner class below). return placeholderfragment.newinstance(position + 1); } @override public int getcount() { // show 2 total pages. return 2; } @override public charsequence getpagetitle(int position) { switch (position) { case 0: return "send"; case 1: return "receive"; } return null; } } } http://pastebin.com/sxcyajnq <-- new code
to view fragment, can use:
getactivity().findviewbyid(r.id.abc); to understand in fragment can this, study fragment lifecycle - http://developer.android.com/guide/components/fragments.html
Comments
Post a Comment