編輯:關於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 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;
}
}
創建一個自定義的ListView:CustomListView,添加滾動事件:
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); }
一看就懂的Android APP開發入門教程
工作中有做過手機App項目,前端和android或ios程序員配合完成整個項目的開發,開發過程中與ios程序配合基本沒什麼問題,而android各種機子和rom的問題很多
小米Note全網通版支持移動/聯通/電信網絡匯總
小米Note全網通版是一款支持電信、聯通、移動手機卡的雙卡雙待手機,是小米Note標准版的升級版,但售價僅比標准版多了100元。下面下載吧小編就為大家總結小
Android基礎整合項目之節日群發助手(二)
Android基礎整合項目(一) 之節日群發助手part 2 ——轉載請注明出處:coder-pig 本節引言: 在上一節中我們已經做出了我們群發助手的第一個界面以及
Android實現倒計時的按鈕的示例代碼
最近有人問我如何實現倒計時的按鈕功能,例如發送驗證碼,我記得有個CountDownTimer,因為好久沒用過了,自己就寫了一個,代碼如下 new CountDownTim