android.support.v4.view.ViewPager擴充包的類,還有地圖api什麼的引入的包這些只要你項目引入該包,該類不用考慮使用者的手機版本
首先進入封面,剛進去的提示協助介面,第一次安裝使用時出現,以後不出現
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_marginBottom="50dp"
android:layout_height="10dp"
android:gravity="center"
android:orientation="horizontal" >
android:id="@+id/position_point_01"
android:layout_width="10dp"
android:layout_height="10dp"
android:background="#00ff00" />
android:layout_width="10dp"
android:layout_height="10dp" />
android:id="@+id/position_point_02"
android:layout_width="10dp"
android:layout_height="10dp"
android:background="#666666" />
android:layout_width="10dp"
android:layout_height="10dp" />
android:id="@+id/position_point_03"
android:layout_width="10dp"
android:layout_height="10dp"
android:background="#666666" />
android:layout_width="10dp"
android:layout_height="10dp" />
android:id="@+id/position_point_04"
android:layout_width="10dp"
android:layout_height="10dp"
android:background="#666666" />
協助介面的圖片viewpager容器
package com.kane.interviewcollection;
import java.util.ArrayList;
import java.util.List;
import com.kane.interviewcollection.adapter.MyPageAdapter;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class HelpActivity extends Activity {
private ViewPager pager;
private MyPageAdapter pageAdapter;
private List allViews = new ArrayList();
private TextView[] allPoints = new TextView[4];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_help);
pager = (ViewPager) findViewById(R.id.pager);
//設定viewpager儲存的view,若不設定,會一直添加經曆過的view,會有bug
pager.setOffscreenPageLimit(3);
allPoints[0] = (TextView) findViewById(R.id.position_point_01);
allPoints[1] = (TextView) findViewById(R.id.position_point_02);
allPoints[2] = (TextView) findViewById(R.id.position_point_03);
allPoints[3] = (TextView) findViewById(R.id.position_point_04);
// 初始化資料
allViews.add(LayoutInflater.from(this).inflate(R.layout.page_01, null));
allViews.add(LayoutInflater.from(this).inflate(R.layout.page_02, null));
allViews.add(LayoutInflater.from(this).inflate(R.layout.page_03, null));
// 單獨為第四個介面加入監聽,進入主介面
View page4 = LayoutInflater.from(this).inflate(R.layout.page_04, null);
page4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent in = new Intent(HelpActivity.this, MainActivity.class);
startActivity(in);
finish();
}
});
allViews.add(page4);
pageAdapter = new MyPageAdapter(allViews);
pager.setAdapter(pageAdapter);
// 為pager加入監聽
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// 改變顏色
for (int i = 0; i < allPoints.length; i++) {
allPoints[i].setBackgroundColor(Color.parseColor("#666666"));
}
allPoints[arg0].setBackgroundColor(Color.GREEN);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
}
主介面
package com.kane.interviewcollection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.kane.interviewcollection.adapter.MyPageAdapter;
import com.kane.interviewcollection.adapter.QuestionAdapter;
import com.kane.interviewcollection.util.DialogManager;
import com.kane.interviewcollection.util.ExitApplication;
import com.kane.interviewcollection.util.Globals;
import com.kane.interviewcollection.util.QuesstionDAOUtils;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Color;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.OnItemClickListener;
/**
* 既能實現滑動切換,也能實現點擊切換
* @author lenovo
*
*/
public class Main2Activity extends Activity {
private ViewPager pager;
TextView titleText;
private Button settingBtn;
// 下面的三個按鈕
private Button[] bottomBtns = new Button[3];
// 未選中的按鈕圖片
private int[] allBottomImgs = { R.drawable.bottom_icon01_a,
R.drawable.bottom_icon02_a, R.drawable.bottom_icon03_a };
// 選中的按鈕圖片
private int[] allBottomImgsSelected = { R.drawable.bottom_icon01_b,
R.drawable.bottom_icon02_b, R.drawable.bottom_icon03_b };
// 聲明迴圈為了在內部類使用
private int i;
// 點擊設定按鈕的浮動視窗
private PopupWindow win;
private MyPageAdapter pageAdapter;
private List allViews = new ArrayList();
// 所有頭部要顯示的標題內容
private String[] allTitleText = { "程式員面試寶典", "全部問題", "搜尋問題" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ExitApplication.getInstance().addActivity(this);//每個activity建立的時候添加到activity列表
setContentView(R.layout.activity_main2);
//進行頭部和尾部的初始化
init("程式員面試寶典", 0);
//儲存一個標誌,表示程式開啟過,下次進來不用協助介面,這裡的SharedPreferences類似web的application,取得是在cover中同一個
SharedPreferences s=getSharedPreferences("question_flag",
MODE_PRIVATE);
if (!s.getBoolean("showed", false)) {
Editor e=s.edit();
e.putBoolean("showed", true);
e.commit();
}
pager=(ViewPager)findViewById(R.id.pager);
//設定viewpager儲存的view,若不設定,會一直添加經曆過的view,會有bug
pager.setOffscreenPageLimit(3);
//添加介面
allViews.add(LayoutInflater.from(this).inflate(R.layout.page_main, null));
View questionView=LayoutInflater.from(this).inflate(R.layout.page_question,null);
//初始問題列表
initQuestionList(questionView);
allViews.add(questionView);
View searchView=LayoutInflater.from(this).inflate(R.layout.page_search, null);
initSearch(searchView);
allViews.add(searchView);
pageAdapter=new MyPageAdapter(allViews);
pager.setAdapter(pageAdapter);
//為pager設定一個監聽,當頁面滑動切換時,可以調整頭部和尾部資訊
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// 調整頭部的文字
titleText.setText(allTitleText[arg0]);
if (arg0==1&&!keyword.equals("")) {
titleText.setText("搜尋: " + keyword);
}
//調整底部按鈕顯示
for (int i = 0; i < bottomBtns.length; i++) {
if (i==arg0) {
bottomBtns[i].setBackgroundResource(allBottomImgsSelected[i]);
}
else {
bottomBtns[i].setBackgroundResource(allBottomImgs[i]);
}
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
private ListView listView;
private QuestionAdapter adapter;
private List> allValues=new ArrayList>();
//聲明幾個分頁的變數
private int pageNo=1;
private int pageSize=20;
private int count=0;
private int allPages=0;
private String keyword="";
//為了調用滑動事件中的內部類的另一個方法的參數
private int first;
private int visCount;
private int total;
private TextView footerText;
public void initQuestionList(View questionListView) {
listView=(ListView)questionListView.findViewById(R.id.list);
//接收關鍵字
keyword=getIntent().getStringExtra("keyword");
if (keyword==null) {
init("全部問題",1);
keyword="";
}
else{
//如果有關鍵詞傳入
init("搜尋:"+keyword,1);
}
allValues=QuesstionDAOUtils.listDataPage(pageNo,pageSize,keyword);
//查詢記錄數
count=QuesstionDAOUtils.getAllCount(keyword);
//計算總頁數
allPages=(count-1)/pageSize+1;
//加入一個提示的底部資訊,每次下拉到分頁的最後一個item
footerText=new TextView(this);
footerText.setText("z正在查詢,請稍後.............");
footerText.setTextColor(Color.BLACK);
footerText.setTextSize(14);
listView.addFooterView(footerText);
//把資料加入到adapter裡
adapter=new QuestionAdapter(this, allValues);
listView.setAdapter(adapter);
//加入監聽,點擊後才可以看到答案
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView arg0, View arg1, int arg2,
long arg3) {
//取得資料
Map map=allValues.get(arg2);
LinearLayout line =(LinearLayout)arg1;//arg1是當前行介面
if(line.getChildCount()==1){//裡面只有問題那一個textview
//加入答案的textview
TextView text = new TextView(Main2Activity.this);
text.setText(map.get("answer").toString());
text.setTextSize(14);
text.setTextColor(Color.RED);
line.addView(text);
map.put("showFlag", true);
}
else{
//刪除答案提示
line.removeViewAt(1);
map.put("showFlag", false);
}
}
});
/**
* 滑動列表事件
*/
listView.setOnScrollListener(new OnScrollListener(){
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
first = firstVisibleItem;
visCount = visibleItemCount;
total = totalItemCount;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState==OnScrollListener.SCROLL_STATE_IDLE&&
first+visCount==total&&total!=0){
if(pageNo//可以查詢下一條資料
pageNo++;
//將新查詢的資料合併到原有的資料集合
allValues.addAll(QuesstionDAOUtils.listDataPage(pageNo,
pageSize,keyword));
//通知介面修改
adapter.notifyDataSetChanged();
}
else{
// 已經查詢了全部的資料,將footer刪除
if (listView.getFooterViewsCount() > 0) {
listView.removeFooterView(footerText);
}
}
}
}});
}
private Button searchBtn;
private EditText searchText;
public void initSearch(View searchView) {
init("搜尋問題",2);
searchBtn=(Button) searchView.findViewById(R.id.searchBtn);
searchText=(EditText)searchView.findViewById(R.id.searchText);
searchBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
keyword=searchText.getText().toString();
//將列表資料重新查詢
pageNo=1;
allValues.clear();
allValues.addAll(QuesstionDAOUtils.listDataPage(pageNo, pageSize, keyword));
//重新顯示列表
adapter.notifyDataSetChanged();
//滑動回列表介面
pager.setCurrentItem(1,true);//1表示問題介面,true表示有變化過程
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
new DialogManager().showExitHit(this);
return false;//執行上面,而不是預設的關閉activity
}
return super.onKeyDown(keyCode, event);//其他鍵原有功能儲存
}
public void init(String title, int selectedBtn) {
// 分別取得公用介面的組件
settingBtn = (Button) findViewById(R.id.settingBtn);
titleText = (TextView) findViewById(R.id.title);
bottomBtns[0] = (Button) findViewById(R.id.bottom01);
bottomBtns[1] = (Button) findViewById(R.id.bottom02);
bottomBtns[2] = (Button) findViewById(R.id.bottom03);
// 每個介面的標題不一樣
titleText.setText(title);
// 迴圈為底部的按鈕加入監聽,這裡的i內部類要用,在外面聲明了
for (i = 0; i < bottomBtns.length; i++) {
// 定義個臨時變數,防止i一直自增,因為迴圈完一邊後i已經是2了,第二次迴圈一開始內部類中就是3了
final int temp = i;
if (i == selectedBtn) {
// 選中的
bottomBtns[i].setBackgroundResource(allBottomImgsSelected[i]);
} else {
// 沒有選中的
bottomBtns[i].setBackgroundResource(allBottomImgs[i]);
// 加入監聽
bottomBtns[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (temp==1) {
keyword="";
}
// 底部按鈕點擊後,應該自動切換到對應的介面
pager.setCurrentItem(temp, true);
}
});
}
}
/**
* 設定按鈕的監聽事件
*/
settingBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 沒有浮動框要添加
if (win == null) {
// 先設定寬高,再設定介面
win = new PopupWindow(Globals.SCREEN_WIDTH / 4,
Globals.SCERRN_HEIGHT / 6);
View view = LayoutInflater.from(Main2Activity.this).inflate(
R.layout.float_window, null);
win.setContentView(view);
// 加入這些內部按鈕的監聽
TextView versionText = (TextView) view
.findViewById(R.id.show_version);
TextView authText = (TextView) view
.findViewById(R.id.about_author);
TextView exitText = (TextView) view.findViewById(R.id.exit);
versionText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Main2Activity.this, "目前的版本是: 1.0",
Toast.LENGTH_LONG).show();
win.dismiss();// 關閉視窗
}
});
authText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Builder builder = new Builder(Main2Activity.this);
builder.setTitle("提示");
builder.setMessage("本作品由needkane發布,歡迎使用");
builder.setNegativeButton("關閉",
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
}
});
builder.create().show();
win.dismiss();// 浮動視窗消失
}
});
exitText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 退出程式
}
});
}
if (win.isShowing()) {
// 隱藏
win.dismiss();
} else {
// 顯示
win.showAsDropDown(settingBtn);
}
}
});
}
}