1. 程式人生 > >ListView動態重新整理某項Item,不重新整理整個列表

ListView動態重新整理某項Item,不重新整理整個列表

使用ViewHolder來重新整理某項資料,而不用每次都全部重新整理資料。

繼承BaseAdapter,新建ViewHolder類。

  1. public class TestListAdapter extends BaseAdapter {  
  2.     private Context mContext;  
  3.     private List<String> strList;  
  4.     public TestListAdapter(Context context, List<String> list) {  
  5.         super();  
  6.         this.mContext
     = context;  
  7.         this.strList = list;  
  8.     }  
  9.     @Override  
  10.     public int getCount() {  
  11.         // TODO Auto-generated method stub  
  12.         return strList.size();  
  13.     }  
  14.     @Override  
  15.     public Object getItem(int position) {  
  16.         // TODO Auto-generated method stub  
  17.         return position;  
  18.     }  
  19.     @Override  
  20.     public long getItemId(int position) {  
  21.         // TODO Auto-generated method stub  
  22.         return position;  
  23.     }  
  24.     @Override  
  25.     public View getView(int position, View convertView, ViewGroup parent) {  
  26.         // TODO Auto-generated method stub  
  27.         ViewHolder holder
     = null;  
  28.         if (null == convertView) {  
  29.             convertView = LayoutInflater.from(mContext).inflate(R.layout.line, null);  
  30.             holder = new ViewHolder();  
  31.             holder.iDText = (TextView) convertView.findViewById(R.id.textView_id);  
  32.             holder.strText = (TextView) convertView.findViewById(R.id.textView_str);  
  33.             convertView.setTag(holder);  
  34.         } else {  
  35.             holder = (ViewHolder) convertView.getTag();  
  36.         }  
  37.         holder.iDText.setText(position + "");  
  38.         String str = strList.get(position);  
  39.         holder.strText.setText(str);  
  40.         return convertView;  
  41.     }  
  42.     private static class ViewHolder {  
  43.         private TextView iDText;  
  44.         private TextView strText;  
  45.     }  
  46.     public void updataView(int posi, ListView listView) {  
  47.         int visibleFirstPosi = listView.getFirstVisiblePosition();  
  48.         int visibleLastPosi = listView.getLastVisiblePosition();  
  49.         if (posi >= visibleFirstPosi && posi <= visibleLastPosi) {  
  50.             View view = listView.getChildAt(posi - visibleFirstPosi);  
  51.             ViewHolder holder = (ViewHolder) view.getTag();  
  52.             String txt = holder.strText.getText().toString();  
  53.             txt = txt + "++;";  
  54.             holder.strText.setText(txt);  
  55.             strList.set(posi, txt);  
  56.         } else {  
  57.             String txt = strList.get(posi);  
  58.             txt = txt + "++;";  
  59.             strList.set(posi, txt);  
  60.         }  
  61.     }  
  62. }  
在Activity中,呼叫updateView()方法,重新整理資料。
  1. public class MainActivity extends Activity {  
  2.     private MainActivity mContext;  
  3.     private EditText idEdit;  
  4.     private TextView textView;  
  5.     private List<String>strList = new ArrayList<String>();  
  6.     private ListView listView;  
  7.     private TestListAdapter ListAdapter;  
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.activity_main);  
  12.         mContext = this;  
  13.         for (int i = 0; i <100; i++) {  
  14.             strList.add("test data");  
  15.         }  
  16.         idEdit = (EditText) findViewById(R.id.edittext_id);  
  17.         textView = (TextView) findViewById(R.id.textview_modify);  
  18.         listView = (ListView) findViewById(R.id.listview);  
  19.         ListAdapter = new TestListAdapter(mContext, strList);  
  20.         listView.setAdapter(ListAdapter);  
  21.         //動態重新整理  
  22.         textView.setOnClickListener(new OnClickListener() {  
  23.             @Override  
  24.             public void onClick(View v) {  
  25.                 // TODO Auto-generated method stub  
  26.                 String idStr = idEdit.getText().toString();  
  27.                 int idInt = Integer.parseInt(idStr);  
  28.                 ListAdapter.updataView(idInt, listView);//動態修改  
  29.             }  
  30.         });  
  31.     }  
  32. }  
給出佈局檔案:
  1. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:background="#FFFFFF"
  6.     android:orientation="vertical">
  7.     <LinearLayout
  8.         android:layout_width="match_parent"
  9.         android:layout_height="40dp"
  10.         android:orientation="horizontal">
  11.         <EditText
  12.             android:id="@+id/edittext_id"
  13.             android:layout_width="200dp"
  14.             android:layout_height="wrap_content"
  15.             android:hint="put modify id"/>
  16.         <TextView
  17.             android:id="@+id/textview_modify"
  18.             android:layout_width="wrap_content"
  19.             android:layout_height="wrap_content"
  20.             android:text="動態修改"
  21.             android:textColor="#123456"/>
  22.     </LinearLayout>
  23.     <ListView
  24.         android:id="@+id/listview"
  25.         android:layout_width="match_parent"
  26.         android:layout_height="wrap_content">
  27.     </ListView>
  28. </LinearLayout>

相關推薦

ListView動態重新整理Item重新整理整個列表

使用ViewHolder來重新整理某項資料,而不用每次都全部重新整理資料。 繼承BaseAdapter,新建ViewHolder類。 public class TestListAdapter extends BaseAdapter {       private C

Android ListView動態刷新Item

ack static auto ids avi idt ica horizon extc 使用ViewHolder來刷新某項數據,而不用每次都全部刷新數據。 繼承BaseAdapter,新建ViewHolder類。 public class TestListAdap

動態導航跳轉重新整理狀態

jquery.cookie.js部分程式碼$("#add_nav").on("click","li",function(){ $("#add_nav").find("li").removeClass("active"); var index = $("#a

發現賣家服務市場服務商BUG花錢免費提升店鋪轉化率!

很多人從雙十一知道了店小蜜,並且嘗試開通了機器人,不過開通之後大多數賣家都是一臉懵逼,為什麼?因為店小蜜開通後並不能直接使用,而是需要使用者去自行配置。那麼配置需要注意哪些問題呢? 首先,要了解自己店鋪的高頻聊天問題,這裡就涉及到聊天記錄分析,通常一家店鋪日常會有70%的問題是重複諮詢的

mysql查詢是否存在條記錄存在則插入存在則更新

在工作中,會遇到這樣的情形,查詢資料庫中是否存在一條記錄資訊,如果不存在則插入一條新的資訊,如果存在,則更新已有的資訊。 面對這樣的需求,之前採用的是先讀取一遍資料庫,判斷是否有資料,如果沒有則插入一條新資訊,如果有,則更新已有資訊,但是這種做法在高併發情況下可

flask之使用ajax實現點選左側邊欄重新整理顯示右邊內容

在實現點選左側導航欄,右側不重新整理頁面顯示網頁內容的方法有很多,可以通過ifram實現、可以使用div繫結a或者li的點選事件 阻止a的預設行為,用jQuery的load()可以來載入這個div,即將網頁放入div中,當然也可以用下面的方式實現,採用ajax技

form表單提交批量上傳檔案重新整理跳轉頁面

jsp: <form action="inImg.do" method="post" enctype="multipart/form-data" target="nm_iframe"> <table> <tr>

定時閃爍重新整理圖片重新整理頁面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html

MyBatis 和 ibatis的動態SQL語句配置符號相容大於號、小於號等特殊符號問題

在XML對映SQL的檔案中,很多情況下會使用到大於號、小於號等特殊符號,這時候如果不進行控制是無法編譯通過的,這時候需要用到<![CDATA[  ]]>符號進行說明,將此類符號不進行解析,還有一種解決方法就是使用轉移字元,如,案例2,其實,這個問題不止在My

asp.net 點選重新整理按鈕重新整理驗證碼重新整理整個頁面

            <asp:textbox runat="server" id="txtValueCode" class="yzm2"></asp:textbox><asp:Image ID="ImgCode" runat="server

vue——詳細頁返回列表重新整理保留列表頁原來停留位置

經常有這樣的功能,從列表頁上選擇一項,跳到詳細頁,詳細頁看完,返回列表頁。這時,列表頁的元件會重新建立,也就是要重新從介面請求一次資料,並且會回到第一行,對於資料更新要求不高的業務來說,這樣會浪費資源,而且體驗頁不好(列表一共100條,滑動到了90條了,點進去看好明細,出來,

用js或者jquery動態給div追加內容覆蓋之前的內容

效果:js<div id="append">ss</div> <script> var divA = document.getElementById("append"

node裡只有js引擎是單執行緒代表整個node都是單執行緒

這裡是摘要一下關鍵的話: 我們可以用Ajax和Web Worker迴應這個誤解(javascript是單執行緒的,無法很好利用多核CPU)。當Ajax請求傳送之後,除非是同步請求,否則其餘的JavaScript程式碼會很快被執行到。在Ajax傳送完成,直到接收到響應的這段

ListView刷新Item

第一個 span get try 使用 ref 如果 href bsp ListView現在已經很少被使用,但還是在這裏列出來說一下,有時候我們僅僅需要改變listView的某個Item,如果調用adapter的notifyDataSetChanged()方法效率不高,並且

Android TV 開發-listview(GridView)使用鍵盤獲取焦點時選中上次失去焦點時的item是就近的item

在電視上開發Android應用時,經常要做有二級選單的應用,例如: 但當我們按左鍵的時候,左邊listview的最近的item會被選中,即如下效果: 但是在電視上開發應用的時候,我們希望是上一次被選中的item重新被選中,即希望是“日期和時間”被重新選中。 為了實現這個

ReactNative ListView改變資料來源列表重新整理

ListView開始時的資料來源: dataArr = [ 'ROW0', 'ROW1', 'ROW2' ] 然後我改變資料來源,重新整理沒反應。當然如何你刪除或者增加一組資料是可以的。 data

android隱藏listview中的item

1.為item加了一層父佈局, 設定view.setVisibility(View.GONE); 但還是會留一個大概1dp高度佔著位置,當連續多個項隱藏時會出現一大片空白 2.設定高度為0 不起作用 params = new RelativeLayout.LayoutPar

實現點選ListViewitem的選中效果

1 設定ListView的監聽,在監聽中記錄點選的位置,並重新整理介面卡,adapter.notifyDataSetChanged(),會呼叫介面卡的getView()方法。 private int currentPosition; listView.setOnItemCl

listview一行item能點選

為了能控制listview的某一行不能有點選事件,在adapter裡重新下面這個方法就可以了。 @Override         public boolean isEnabled(int position)         {             if(positi

Android中點選listview中的字型變色

不廢話! 1、在listview的adapter 中新增一個方法  public void selectedItemPosition(int position) { this.selectedPositon = position; } 2、在getView()方