編輯:關於Android編程
ListView的使用:
建立一個listView的布局文件,命名為:item_layout.xml:大致視圖如下
創建一個自定義ListView的布局文件:activity_main.xml
建立一個Entity,命名為:PersonEntiry.java,用於顯示
package com.example.linux.listviewscrolltest.linux; /** * Created by Linux on 2016/3/13. */ public class PersonEntiry { private int imageId; private String username; private String password; private String button; public int getImageId() { return imageId; } public void setImageId(int imageId) { this.imageId = imageId; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getButton() { return button; } public void setButton(String button) { this.button = button; } }建立一個Holder,命名為:PersonViewHolder.java,對應於布局文件中的四個組件
package com.example.linux.listviewscrolltest.linux; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; /** * Created by Linux on 2016/3/13. */ public class PersonViewHolder { ImageView imageView; TextView textView1; TextView textView2; Button button; }創建一個ListView的適配器,命名為PersonAdapter.java, 重寫父類的四個方法:
package com.example.linux.listviewscrolltest.linux; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.example.linux.listviewscrolltest.R; import java.util.List; /** * Created by 胡紅翔 on 2016/3/13. * function: 自定義ListView的適配器 * */ public class PersonAdapter extends BaseAdapter { List創建一個自定義的ListView:CustomListView,添加滾動事件:personEntiries; LayoutInflater inflater; public PersonAdapter(Context context, List personEntiries) { this.personEntiries = personEntiries; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { return personEntiries.size(); } @Override public Object getItem(int position) { return personEntiries.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { PersonEntiry entity = personEntiries.get(position); PersonViewHolder holder; if (convertView == null) { holder = new PersonViewHolder(); convertView = inflater.inflate(R.layout.item_layout, null); holder.imageView = (ImageView) convertView.findViewById(R.id.imageView); holder.textView1 = (TextView) convertView.findViewById(R.id.textView1); holder.textView2 = (TextView) convertView.findViewById(R.id.textView2); holder.button = (Button) convertView.findViewById(R.id.button); convertView.setTag(holder); } else { holder = (PersonViewHolder) convertView.getTag(); } holder.imageView.setImageResource(entity.getImageId()); holder.textView1.setText(entity.getUsername()); holder.textView2.setText(entity.getPassword()); holder.button.setText(entity.getButton()); return convertView; } }
package com.example.linux.listviewscrolltest.linux; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.widget.AbsListView; import android.widget.ListView; /** * Created by Linux on 2016/3/13. * function: 自定義的ListView */ public class CustomListView extends ListView implements AbsListView.OnScrollListener { private static final String TAG = "MainActivity"; public CustomListView(Context context) { super(context); setOnScrollListener(this); } public CustomListView(Context context, AttributeSet attrs) { super(context, attrs); setOnScrollListener(this); } public CustomListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setOnScrollListener(this); } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // view應該就是可見的View的集合 Log.i(TAG, "state change: " + scrollState + ", view size: " + view.getChildCount()); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { Log.i(TAG, "on scroll: " + firstVisibleItem + ", visible: " + visibleItemCount + " , " + totalItemCount); } }最後在MainActivity中使用自定義的ListView:
package com.example.linux.listviewscrolltest; import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.example.linux.listviewscrolltest.linux.CustomListView;import com.example.linux.listviewscrolltest.linux.PersonAdapter;import com.example.linux.listviewscrolltest.linux.PersonEntiry;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private CustomListView listView; private PersonAdapter personAdapter; private List personEntiries = new ArrayList<>(); private PersonEntiry entity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (CustomListView) findViewById(R.id.listView); setData(); initListView(); } // 增加數據 private void setData() { for (int i = 0; i < 10; i++) { entity = new PersonEntiry(); entity.setImageId(R.mipmap.ic_launcher); entity.setUsername("linux: " + i); entity.setPassword("huhx: " + i); entity.setButton("劉力: " + i); personEntiries.add(entity); } } // 生成ListView private void initListView() { personAdapter = new PersonAdapter(this, personEntiries); listView.setAdapter(personAdapter); }}為測試方便,附上AndroidManifest.xml
ListView中比較重要的幾個要素:
然後,根據適配器的種類,我們可以把listview分成三種,有ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,而最後一種是專門與數據庫連接用的。
說起數據適配器 :
顧名思義,就是把一些數據給弄得適當,適合以便於在View上顯示。可以看作是 界面數據綁定的一種理解。它所操縱的數據一般都是一些比較復雜的數據,如數組,鏈表, 數據庫,集合等。 適配器就像顯示器,把復雜的東西按人可以接受的方式來展現。 那麼適配器是怎麼處理得到的數據,並把它顯示出來的呢。其實很簡單,說白了適配器它也 是一個類,在類裡面它實現了父類的這幾個方法: publicint getCount() //得到數據的行數 public Object getItem(int position)//根據position得到某一行的記錄 public long getItemId(int position)//的到某一條記錄的ID //下面這個方法是最重要的相比於其它幾個方法,它顯式的定義了,適配器將要 以什麼樣的 //方式去顯示我們所填充的數據,在自定義的適配器裡面我們通常會給它寫個布局文件 publicView getView(int position, View convertView, ViewGroup parent) 我們常用的適配器一共有三個:ArrayAdapter,SimpleAdapter,SimpleCursorAdapter 這三個,他們都是繼承於BaseAdapter 下面貼上一個自己簡單封裝的適配器代碼:
public abstract class MyBaseAdapaterextends BaseAdapter { private List list = new ArrayList (); public MyBaseAdapater(List list) { super(); this.list = list; } // 返回行數 @Override public int getCount() { return list.size(); } // 返回指定下標的實例 @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } // 返回 行視圖 顯示指定下標的數據 具體由子類去實現 @Override public abstract View getView(int position, View convertView, ViewGroup parent); }
工作中有做過手機App項目,前端和android或ios程序員配合完成整個項目的開發,開發過程中與ios程序配合基本沒什麼問題,而android各種機子和rom的問題很多
小米Note全網通版是一款支持電信、聯通、移動手機卡的雙卡雙待手機,是小米Note標准版的升級版,但售價僅比標准版多了100元。下面下載吧小編就為大家總結小
Android基礎整合項目(一) 之節日群發助手part 2 ——轉載請注明出處:coder-pig 本節引言: 在上一節中我們已經做出了我們群發助手的第一個界面以及
最近有人問我如何實現倒計時的按鈕功能,例如發送驗證碼,我記得有個CountDownTimer,因為好久沒用過了,自己就寫了一個,代碼如下 new CountDownTim