清除自定义适配器

编程入门 行业动态 更新时间:2024-10-23 21:39:37
本文介绍了清除自定义适配器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

香港专业教育学院implented一个搜索栏到我的ListView和到目前为止,它工作正常,除了 该适配器怪怪的。每次我调用它的清除功能我的列表视图仍显示旧的内容。

公共抽象类MYLISTITEM扩展了BaseAdapter { 民营背景的活动; 私人列表<字符串>数据; 私有静态LayoutInflater吹气= NULL; 私人诠释ItemIcon; 私人布尔moreVis; 公共MYISTITEM(背景信息,INT IconID,布尔VIS){     活性= A;     数据=新的ArrayList<字符串>();     充气=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);     ItemIcon = IconID;     moreVis =可见; } 公共无效添加(String对象) {     data.add(对象);     notifyDataSetChanged(); } 公共无效REPLACE(INT指数,String对象) {     在data.set(索引,对象);     notifyDataSetChanged(); } 公共无效清除() {     data.clear();     notifyDataSetChanged(); } 公共无效删除(Object对象) {     data.remove(对象);     notifyDataSetChanged(); } @覆盖 公众诠释getCount将(){     // TODO自动生成方法存根     返回data.size(); } 公共无效插入(String对象,INT C) {     在data.set(C,对象);     notifyDataSetChanged(); } @覆盖 公共字符串的getItem(INT位置){     // TODO自动生成方法存根     如果(位置> = 0&功放;&安培;位置< data.size())     {         返回data.get(位置);     }     返回null; } @覆盖 众长getItemId(INT位置){     // TODO自动生成方法存根     返回的位置; } 公共静态类ViewHolder {     公共TextView的文字;     公众ImageView的形象; } @覆盖 公共查看getView(INT位置,查看convertView,ViewGroup中父){     查看VI = convertView;     ViewHolder持有人;     如果(convertView == NULL){         VI = inflater.inflate(R.layout.item,父母,假);         持有人=新ViewHolder();         holder.text =(TextView中)vi.findViewById(R.id.text);         holder.image =(ImageView的)vi.findViewById(R.id.image);         vi.setTag(保持器);     }     其他         支架=(ViewHolder)vi.getTag();     holder.text.setText(data.get(位置));     holder.image.setImageDrawable(activity.getResources()getDrawable(ItemIcon));     的ImageButton btn_more =(的ImageButton)vi.findViewById(R.id.more);     如果(moreVis)     {         btn_more.setOnClickListener(新OnMoreClickListener(btn_more,位置));     }     其他     {         btn_more.setVisibility(View.GONE);     }     vi.setOnClickListener(新OnRowClickListener(六,位置));     返回六; } 公共抽象无效OnRowClick(查看MVIEW,INT位置); 公共抽象无效OnMoreClick(查看MVIEW,INT位置); 私有类OnRowClickListener实现OnClickListener {     私人诠释mPosition;     私人查看MView的;     OnRowClickListener(查看视图,INT位置){             mPosition =位置;             MVIEW =图。     }     @覆盖     公共无效的onClick(查看为arg0){         OnRowClick(MVIEW,mPosition);     } } 私有类OnMoreClickListener实现OnClickListener {     私人诠释mPosition;     私人查看MView的;     OnMoreClickListener(查看视图,INT位置){             mPosition =位置;             MVIEW =图。     }     @覆盖     公共无效的onClick(查看为arg0){             OnMoreClick(MVIEW,mPosition);     } }

}

调试器显示,数据的唯一的大小已被改变,但没有其内容。我怀念的东西在这里???

一些额外的code:

公共抽象类自选扩展的ListView { 公共抽象无效的init(); 公共抽象无效OnLoadFinished(); 公共抽象无效OnRowClicked(INT位); 公共抽象无效onCreateQuickAction(MYQUICKACTION行动,诠释位置); 公共抽象无效CreateOptionMenu(功能菜单); 公共抽象布尔OptionsItemSelected(菜单项项); 公共MYLISTITEM适配器= NULL; 公共静态无效StartupScreen(活动电流,类<>接下来) {     意图myIntent =新的意图(目前,下一个);     current.startActivity(myIntent); } 公共自选画面(活动的背景下,INT图标){     超(上下文);     布尔moreisvis = TRUE;     MYQUICKACTION canarybirdybirdy =新MYQUICKACTION(新景(上​​下文));     onCreateQuickAction(canarybirdybirdy,0);     如果(canarybirdybirdy.anchor.getVisibility()!= View.VISIBLE)     {         moreisvis = FALSE;     }     适配器=新MYLISTITEM(上下文,图标,moreisvis){         @覆盖         公共无效OnRowClick(查看MVIEW,INT位置){             // TODO自动生成方法存根             OnRowClicked(位置);         }         @覆盖         公共无效OnMoreClick(查看MVIEW,INT位置){             // TODO自动生成方法存根             最后MYQUICKACTION mQuickAction =新MYQUICKACTION(MVIEW);             最后的ImageButton mMoreImage =(的ImageButton)mView.findViewById(MY.views.R.id.more);             mMoreImage.setImageResource(MY.views.R.drawable.ic_list_more_selected);             onCreateQuickAction(mQuickAction,位置);             mQuickAction.setAnimStyle(MYQUICKACTION.ANIM_AUTO);             mQuickAction.setOnDismissListener(新OnDismissListener(){                 @覆盖                 公共无效onDismiss(){                     mMoreImage.setImageResource(MY.views.R.drawable.ic_list_more);                 }             });             mQuickAction.show();         }     };     最后ProgressDialog对话框=新ProgressDialog(上下文);     dialog.setMessage(载入中...);     dialog.show();     新的Loader(){         @覆盖         公共无效RunThread(){             在里面();         }         @覆盖         公共无效FinishLoad(){             dialog.dismiss();             OnLoadFinished();         }     }。开始(); } 公共抽象类MYTHREAD扩展的AsyncTask<虚空,虚空,虚空> {     公共抽象无效InitThread();     公共抽象无效RunThread();     公共抽象无效FinishThread();     @覆盖     保护无效doInBackground(虚空...... PARAMS){         RunThread();         // TODO自动生成方法存根         返回null;     }     // UI的东西允许     @覆盖     在preExecute保护无效(){         InitThread();     }     // UI的东西允许     @覆盖     保护无效onProgressUpdate(空...值){         super.onProgressUpdate(值);     }     // UI的东西允许     @覆盖     保护无效onPostExecute(最终虚空未使用){         FinishThread();     }     公共无效启动()     {         this.execute();     } } 公共抽象类加载器扩展MYTHREAD {     公共抽象无效FinishLoad();     @覆盖     公共无效InitThread(){         // TODO自动生成方法存根     }     @覆盖     公共无效FinishThread(){         // TODO自动生成方法存根         FinishLoad();     } }}

和这里的功能,让我headache.Its从自选派生类中的一个,哦,它也被称为从搜索按钮clickevent。

@覆盖 公共无效OnLoadFinished(){     // TODO自动生成方法存根     SelectedTable = TabController.Instance.Clients [TabController.Instance.selectedtab? 1:0] .DbTablename;     adapter.clear();     TabController.Instance.Clients [TabController.Instance.selectedtab? 1:0] .MetaEntities(SelectedTable,真,新ClientCallBackHandler(){         @覆盖         公共无效StartCallBack(){             // TODO自动生成方法存根             prgdialog.setMessage(连接服务......);             prgdialog.show();         }         @覆盖         公共无效EndCallBack(布尔成功){             // TODO自动生成方法存根             如果(成功)             {                 尝试{                     ExceptionResponse除=(ExceptionResponse)this.response;                     ab.setMessage(Html.fromHtml(&其中b取代;&所述;字体颜色=#FF0000>中+ except.Message));                     ab.setPositiveButton(OK,NULL);                     ab.show();                     成功= FALSE;                 }赶上(例外五)                 {                     MetadataEntitiesResponse RESP =(MetadataEntitiesResponse)响应;                     如果(resp.Entities [0]!= NULL)                     {                         耳鼻喉科= resp.Entities [0];                         INT I = 0;                         //搜索我们数据库中的第一个字符串...                         对于(AttributeMetaData ATT:Ent.Attributes)                         {                             如果(Att.Type.contentEquals(字符串))                             {                                 SelectedAttribute =我;                                 打破;                             }                             我++;                         }                         StartQuery(0); //这里适配器被充满信息                     }                 }             }         }     }); }

私人无效StartQuery(INT页) {     如果(当前是!= -1)     {         下一页=页面;         返回;     }     查询查询=新的Query();     query.EntityName = Ent.Name;     如果(SearchFilter!= NULL)     {         query.Filter =新的过滤器();         query.Filter.Filters = SearchFilter;         query.Filter.FilterOperator = Filter.E_FilterOperator.And;     }     query.Columns =新AllColumns();     query.Limit =新的限制();     query.Limit.Count = 15;     订购订购=新订单();     order.OrderType = Order.OrderTypeE.Ascending;     order.AttributeName = Ent.Attributes [SelectedAttribute] .Name点;     query.Orders =新订单[] {为了};     当前页= query.Limit.Page =页面;     TabController.Instance.Clients [TabController.Instance.selectedtab? 1:0] .RetrieveMultiple(查询,新ClientCallBackHandler(){         @覆盖         公共无效StartCallBack(){             // TODO自动生成方法存根         }         @覆盖         公共无效EndCallBack(布尔成功){             // TODO自动生成方法存根             尝试{                 ExceptionResponse除=(ExceptionResponse)this.response;                 ab.setMessage(Html.fromHtml(&其中b取代;&所述;字体颜色=#FF0000>中+ except.Message));                 ab.setPositiveButton(OK,NULL);                 ab.show();                 成功= FALSE;             }赶上(例外五)             {                 RetrieveMultipleResponse rmResp =(RetrieveMultipleResponse)this.response;                 如果(adapter.getCount()== 0)                 {                     的for(int i = 0; I< rmResp.TotalRecords;我++)                     {                         prgdialog.setMessage(((int)的(ⅰ/ rmResp.TotalRecords * 100))+%);                         adapter.add(连接...);                     }                     prgdialog.dismiss();                 }                 INT I = 0;                 对于(实体耳鼻喉科:rmResp.Entities)                 {                     adapter.replace(当前页* 15 + I,ent.Properties [SelectedAttribute]的ToString());                     我++;                 }                 如果(当前页==下一页)                 {                     下一页= -1;                 }                 其他                 {                     StartQuery(下一页);                 }                 当前页= -1;             }         }     }); }

解决方案

我想这code .. 在我们正在创建的CustomListView适配器的OnCreate(),调用一个函数。

adapter.clear();

在CustomListViewAdapter类来创建一个功能明确

公共无效清除(){     // TODO自动生成方法存根     movieItems.clear(); }

在这里movieItems是ListView控件的名称

ive implented a searchbar into my ListView and so far it works correctly except that the adapter is acting weird. Everytime i call its clear function my listview still shows the "old" content.

public abstract class MYLISTITEM extends BaseAdapter { private Context activity; private List<String> data; private static LayoutInflater inflater=null; private int ItemIcon; private boolean moreVis; public MYISTITEM(Context a, int IconID,boolean vis) { activity = a; data = new ArrayList<String>(); inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ItemIcon = IconID; moreVis = vis; } public void add(String object) { data.add(object); notifyDataSetChanged(); } public void replace(int index,String object) { data.set(index, object); notifyDataSetChanged(); } public void clear() { data.clear(); notifyDataSetChanged(); } public void remove(Object object) { data.remove(object); notifyDataSetChanged(); } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } public void insert(String object,int c) { data.set(c, object); notifyDataSetChanged(); } @Override public String getItem(int position) { // TODO Auto-generated method stub if(position >= 0 && position < data.size()) { return data.get(position); } return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } public static class ViewHolder{ public TextView text; public ImageView image; } @Override public View getView(int position, View convertView, ViewGroup parent) { View vi=convertView; ViewHolder holder; if(convertView==null){ vi = inflater.inflate(R.layout.item,parent, false); holder=new ViewHolder(); holder.text=(TextView)vi.findViewById(R.id.text); holder.image=(ImageView)vi.findViewById(R.id.image); vi.setTag(holder); } else holder=(ViewHolder)vi.getTag(); holder.text.setText(data.get(position)); holder.image.setImageDrawable(activity.getResources().getDrawable(ItemIcon)); ImageButton btn_more = (ImageButton) vi.findViewById(R.id.more); if(moreVis) { btn_more.setOnClickListener(new OnMoreClickListener(btn_more,position)); } else { btn_more.setVisibility(View.GONE); } vi.setOnClickListener(new OnRowClickListener(vi,position)); return vi; } public abstract void OnRowClick(View mView, int position); public abstract void OnMoreClick(View mView, int position); private class OnRowClickListener implements OnClickListener{ private int mPosition; private View mView; OnRowClickListener(View view,int position){ mPosition = position; mView = view; } @Override public void onClick(View arg0) { OnRowClick(mView,mPosition); } } private class OnMoreClickListener implements OnClickListener{ private int mPosition; private View mView; OnMoreClickListener(View view,int position){ mPosition = position; mView = view; } @Override public void onClick(View arg0) { OnMoreClick(mView,mPosition); } }

}

the debugger shows that only the size of data has been changed but none of its content. Do i miss something here???

some additional code:

public abstract class MYSCREEN extends ListView{ public abstract void Init(); public abstract void OnLoadFinished(); public abstract void OnRowClicked(int position); public abstract void onCreateQuickAction(MYQUICKACTION action,int position); public abstract void CreateOptionMenu(Menu menu); public abstract boolean OptionsItemSelected(MenuItem item); public MYLISTITEM adapter = null; public static void StartupScreen(Activity current,Class<?> next) { Intent myIntent = new Intent(current,next); current.startActivity(myIntent); } public MYSCREEN(Activity context,int Icon) { super(context); boolean moreisvis = true; MYQUICKACTION canarybirdybirdy = new MYQUICKACTION(new View(context)); onCreateQuickAction(canarybirdybirdy,0); if(canarybirdybirdy.anchor.getVisibility() != View.VISIBLE) { moreisvis = false; } adapter = new MYLISTITEM(context,Icon,moreisvis){ @Override public void OnRowClick(View mView, int position) { // TODO Auto-generated method stub OnRowClicked(position); } @Override public void OnMoreClick(View mView, int position) { // TODO Auto-generated method stub final MYQUICKACTION mQuickAction = new MYQUICKACTION(mView); final ImageButton mMoreImage = (ImageButton) mView.findViewById(MY.views.R.id.more); mMoreImage.setImageResource(MY.views.R.drawable.ic_list_more_selected); onCreateQuickAction(mQuickAction,position); mQuickAction.setAnimStyle(MYQUICKACTION.ANIM_AUTO); mQuickAction.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { mMoreImage.setImageResource(MY.views.R.drawable.ic_list_more); } }); mQuickAction.show(); } }; final ProgressDialog dialog = new ProgressDialog(context); dialog.setMessage("loading..."); dialog.show(); new LOADER(){ @Override public void RunThread() { Init(); } @Override public void FinishLoad() { dialog.dismiss(); OnLoadFinished(); } }.Start(); } public abstract class MYTHREAD extends AsyncTask<Void, Void, Void> { public abstract void InitThread(); public abstract void RunThread(); public abstract void FinishThread(); @Override protected Void doInBackground(Void... params) { RunThread(); // TODO Auto-generated method stub return null; } //ui stuff allowed @Override protected void onPreExecute() { InitThread(); } //ui stuff allowed @Override protected void onProgressUpdate(Void... value) { super.onProgressUpdate(value); } //ui stuff allowed @Override protected void onPostExecute(final Void unused) { FinishThread(); } public void Start() { this.execute(); } } public abstract class LOADER extends MYTHREAD{ public abstract void FinishLoad(); @Override public void InitThread() { // TODO Auto-generated method stub } @Override public void FinishThread() { // TODO Auto-generated method stub FinishLoad(); } }}

and here is the function that gives me the headache.Its from one of MYSCREEN derived classes , oh and its also called from the search-buttons clickevent.

@Override public void OnLoadFinished() { // TODO Auto-generated method stub SelectedTable = TabController.Instance.Clients[TabController.Instance.selectedtab ? 1 : 0].DbTablename; adapter.clear(); TabController.Instance.Clients[TabController.Instance.selectedtab ? 1 : 0].MetaEntities(SelectedTable, true, new ClientCallBackHandler(){ @Override public void StartCallBack() { // TODO Auto-generated method stub prgdialog.setMessage("connecting service..."); prgdialog.show(); } @Override public void EndCallBack(boolean success) { // TODO Auto-generated method stub if(success) { try{ ExceptionResponse except = (ExceptionResponse) this.response; ab.setMessage(Html.fromHtml("<b><font color=#ff0000>" + except.Message)); ab.setPositiveButton("ok", null); ab.show(); success = false; }catch(Exception e) { MetadataEntitiesResponse resp = (MetadataEntitiesResponse) response; if(resp.Entities[0] != null) { Ent = resp.Entities[0]; int i = 0; //search for the first string in our database ... for(AttributeMetaData Att : Ent.Attributes) { if(Att.Type.contentEquals("string")) { SelectedAttribute = i; break; } i++; } StartQuery(0); //here the adapter gets filled with info } } } } }); }

private void StartQuery(int page) { if(currentpage != -1) { nextpage = page; return; } Query query = new Query(); query.EntityName = Ent.Name; if(SearchFilter != null) { query.Filter = new Filter(); query.Filter.Filters = SearchFilter; query.Filter.FilterOperator = Filter.E_FilterOperator.And; } query.Columns = new AllColumns(); query.Limit = new Limit(); query.Limit.Count = 15; Order order = new Order(); order.OrderType = Order.OrderTypeE.Ascending; order.AttributeName = Ent.Attributes[SelectedAttribute].Name; query.Orders = new Order[] {order}; currentpage = query.Limit.Page = page; TabController.Instance.Clients[TabController.Instance.selectedtab ? 1 : 0].RetrieveMultiple(query, new ClientCallBackHandler(){ @Override public void StartCallBack() { // TODO Auto-generated method stub } @Override public void EndCallBack(boolean success) { // TODO Auto-generated method stub try{ ExceptionResponse except = (ExceptionResponse) this.response; ab.setMessage(Html.fromHtml("<b><font color=#ff0000>" + except.Message)); ab.setPositiveButton("ok", null); ab.show(); success = false; }catch(Exception e) { RetrieveMultipleResponse rmResp = (RetrieveMultipleResponse) this.response; if(adapter.getCount() == 0) { for(int i = 0; i< rmResp.TotalRecords;i++) { prgdialog.setMessage( ((int) (i/rmResp.TotalRecords * 100)) + "%"); adapter.add("connecting..."); } prgdialog.dismiss(); } int i = 0; for(Entity ent : rmResp.Entities) { adapter.replace(currentpage*15+i, ent.Properties[SelectedAttribute].ToString()); i++; } if(currentpage == nextpage) { nextpage = -1; } else { StartQuery(nextpage); } currentpage = -1; } } }); }

解决方案

i tried this code.. in oncreate() of where we are creating the CustomListView Adapter, call a function.

adapter.clear();

on the CustomListViewAdapter class create a function as clear

public void clear() { // TODO Auto-generated method stub movieItems.clear(); }

where movieItems is the name of the ListView

更多推荐

清除自定义适配器

本文发布于:2023-11-26 21:26:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1635244.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   适配器

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!