android - Having a custom view of a 3rd party library view as an inner class within an activity -


i have activity in have referenced custom view 3rd party library. custom view multi-select spinner search extends spinner.

i want customize view's performclick() behaviour further loading adapter after completing asynctask. meaning, upon clicking on view, show progress dialog in activity thread user knows adapter loading, run asynctask in background thread , once task completes, update adapter. this, have tried many suggested solutions after thoroughly searching web , so, each of them, i'm facing different challenges. i've explained them below:

solution 1-create non-static asynctask , non-static inner class custommultispinnersearch within activity , executing asynctask in performclick() of custommultispinnersearch. challenge i'm not able inflate xml , keep getting "caused by: java.lang.nosuchmethodexception: [class android.content.context, interface android.util.attributeset]" error though have included required constructors , making them public.

solution 2-create entirely new non-static class custommultispinnersearch, , send intent activity in performclick() execute asynctask. xml inflated , task execution works fine in case, adapter view not shown @ though return false overriding performclick(). also, have no reference async task in activity perform checks such (if task.iscancelled()).

solution 3-make inner class custommultispinnersearch within activity static , remove references outer class. still same error "caused by: java.lang.nosuchmethodexception: [class android.content.context, interface android.util.attributeset]"

so, there way achieve want achieve? i'm adding code solution 1 below.

activity.xml

<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/scroll" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/textcolorprimary" android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior">  <relativelayout     android:id="@+id/container"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:paddingtop="@dimen/activity_vertical_margin"     android:paddingbottom="@dimen/activity_vertical_margin"     android:layout_marginleft="20dp"     android:layout_marginright="20dp">      <view         class="com.example.activity.activity$custommultispinnersearch"         android:id="@+id/searchmultispinner"         android:layout_width="fill_parent"         android:layout_height="40dp"         android:background="@drawable/border"         android:hint="type search"         android:gravity="center_vertical"/> 

activity.java

public class activity extends appcompatactivity {     ...     setcontentview(r.layout.activity);     searchspinner = new custommultispinnersearch(context);     searchspinner = (custommultispinnersearch)      findviewbyid(r.id.searchmultispinner);     ... }  public class loadspinnertask extends asynctask<void, void, list<keypairbooldata>> {     public progressdialog dialog;     public activity activity;      public loadspinnertask(activity activity){         this.activity = activity;         dialog = new progressdialog(this.activity);     }      @override     protected void onpreexecute() {         this.dialog.setprogressstyle(progressdialog.style_spinner);         this.dialog.setmessage("loading...");         this.dialog.setindeterminate(true);         this.dialog.setcanceledontouchoutside(false);         this.dialog.show();         //super.onpreexecute();     }      @override     protected list<keypairbooldata> doinbackground(void... arg0) {         ***dosomething()              if (iscancelled()) {                 log.v(tag, "cancelling loadspinnertask");                 break;             }        return listarray;     }      @override     protected void onpostexecute(list<keypairbooldata> result) {         if (this.dialog.isshowing()){             this.dialog.dismiss();         }         log.v(tag, "publising results spinner");         //searchspinner.setvisibility(view.visible);         searchspinner.setitems(result, -1, new spinnerlistener() {             @override             public void onitemsselected(list<keypairbooldata> items) {                 (int = 0; < items.size(); i++) {                     if (items.get(i).isselected()) {                         log.v("tag", + " : " + items.get(i).getname() + " : " + items.get(i).isselected());                     }                 }             }         });     } }  public class custommultispinnersearch extends multispinnersearch {      public custommultispinnersearch(context context) {         super(context);     }      public custommultispinnersearch(context context, attributeset arg1) { super(context, arg1); }      public custommultispinnersearch(context context, attributeset arg1, int arg2) {         super(context, arg1, arg2);     }      @override     public boolean performclick () {         log.v(tag, "click done");          if (loadspinnertask.iscancelled() ||                 (searchspinner.getadapter().getcount() <= 0 || searchspinner.getadapter() == null)){             loadspinnertask = new loadspinnertask(activity.this).execute();             return false;         } else {             super.performclick();             return true;         }     } } 


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -