準備,分析:
分析下這個界面,主要由幾個tabbar分管不同的界面,首先我們會想到TabActivity,這是我們以前的做法,安卓更新越來越好,功能也越來越完善,我們也要時刻更新自己的技術,要不就會被淘汰,TabActivity已經被google淘汰了,現在大多數的做法已經換成了TabHost加Fragment,本文是采用FragmentTabHost類
FragmentTabhost實際上是又對TabHost的封裝,使我們可以更快捷的開發
FragmentTabhost的具體用法和TabHost的用法是差不多的,隻不過Activity換成了Fragment,碎片在重用上給我們開發帶來了很大的友善,不過讓人煩惱的事每次都會重新onCreateView()讓無數開發者止步于此,本人也在學習改善的過程中,目前隻用fragment寫過兩個項目,總體還是比較喜歡這個東東的,切換效果什麼的比Activity好加多了!
下面說一下這個東東遇到的問題和需要注意的問題:分辨率的适配:分辨率适配(拿來主義)
正在運作的android程式,按home鍵後退回桌面,再次點選程式圖檔又重新開機程式,解決方案:去掉首次進入程式Activity設定的啟動模式 android:launchMode="singleTask"
Log日志工具類:可從工程裡面util包下copy Logger類
本應用用的的圖檔均來自新浪微部落格戶端(如有侵權,請告之)
開始,建構
本應采用的是比較普遍的一種分包方式,主要按照元件的類型來分:建構配置類,基類,應用類(application)
建構工具類(其實就是把總結的工具類CV一下)
看到這些,肯定會有很多人會想:都用别人的安全不,好用不(如果有好用的可以分享下)----曾經自己也寫過,http的一些操作類啊什麼的,但總不如人家封裝的完善,既然不如開源的好,那就直接套用的,不适應的地方自己在做下修改,何樂而不為呢?也有很多ui綁定點選事件的開源類庫,在本應用中沒有到...
//=========所有Activity繼承該類,用于實作一些基本操作
public class BaseActivity extends FragmentActivity {
public MyHandler myHandler;
protected ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
init();
}
private void init() {
myHandler = new MyHandler(this);
progressDialog = new ProgressDialog(this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setCancelable(true);
progressDialog.setMessage("正在加載");
progressDialog.setCanceledOnTouchOutside(false);
}
public static class MyHandler extends Handler {
WeakReference baseActivitys;
MyHandler(BaseActivity baseActivity) {
baseActivitys = new WeakReference(baseActivity);
}
@Override
public void handleMessage(Message msg) {// 定義一個Handler,用于處理下載下傳線程與UI間通訊
if (!Thread.currentThread().isInterrupted()) {
final BaseActivity baseActivity = baseActivitys.get();
switch (msg.what) {
case AppConfig.SHWO_PROGRESS:
baseActivity.progressDialog.show();// 顯示進度對話框
break;
case AppConfig.HIDE_PROGRESS:
baseActivity.progressDialog.hide();// 隐藏進度對話框,不可使用dismiss()、cancel(),否則再次調用show()時,顯示的對話框小圓圈不會動。(WebView)
break;
case AppConfig.DISS_PROGRESS:
baseActivity.progressDialog.dismiss();//關閉進度對話框
case AppConfig.NET_ERR_SHOW:
baseActivity.ToastShow(AppConfig.NET_ERR);// 網絡異常
break;
case AppConfig.DATA_ERR_SHOW:
baseActivity.ToastShow(AppConfig.DATA_ERR);// 資料異常
break;
default:
baseActivity.getMessage(msg);
break;
}
}
super.handleMessage(msg);
}
};
public void showProgress(){
myHandler.sendEmptyMessage(AppConfig.SHWO_PROGRESS);
}
public void hideProgress(){
myHandler.sendEmptyMessage(AppConfig.HIDE_PROGRESS);
}
public void dissProgress(){
myHandler.sendEmptyMessage(AppConfig.DISS_PROGRESS);
}
public void netErrShow() {
myHandler.sendEmptyMessage(AppConfig.NET_ERR_SHOW);
}
public void dataErrShow() {
myHandler.sendEmptyMessage(AppConfig.DATA_ERR_SHOW);
}
public void sendMessage(int what){
myHandler.sendEmptyMessage(what);
}
public void sendMessage(Message msg){
myHandler.sendMessage(msg);
}
public void sendMessage(Message msg,long delayMillis){
myHandler.sendMessageDelayed(msg, delayMillis);
}
public void ToastShow(String content) {
ToastUtils.show(BaseActivity.this.getApplicationContext(), content);
}
protected void getMessage(Message msg) {
}
}
//===============主界面
public class KKsinaActivity extends BaseActivity{
private FragmentTabHost mFth;
private LinkedList> classes;
private LayoutInflater layoutInflater;//布局加載管理器
private int mImageView[] = {R.drawable.tab_home,R.drawable.tab_message,R.drawable.tab_profile,R.drawable.tab_discover,R.drawable.tab_more};//Tab頁籤圖示
private String mTextview[] = {"首頁", "消息", "我","廣場", "更多"};//Tab頁籤标題
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kksina);
initData();
initView();
}
private void initData() {
// TODO Auto-generated method stub
classes = new LinkedList>();
classes.add(HomeFragment.class);
classes.add(MessageFragment.class);
classes.add(ProfileFragment.class);
classes.add(DiscoverFragment.class);
classes.add(MoreFragment.class);
}
private void initView() {
// TODO Auto-generated method stub
layoutInflater = LayoutInflater.from(this);
//執行個體化TabHost對象,得到TabHost
mFth = (FragmentTabHost)findViewById(android.R.id.tabhost);
mFth.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
addTab(classes);
}
private void addTab(final LinkedList> classes) {
int size = classes.size();
for (int i = 0; i < size; i++) {
//為每個Tab按鈕設定圖示、文字和内容
TabSpec tabSpec = mFth.newTabSpec(mTextview[i]).setIndicator(getTabItemView(i));
//将Tab按鈕添加進Tab頁籤中
mFth.addTab(tabSpec, classes.get(i), null);
mFth.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.tabbar_bg);
}
}
private View getTabItemView(int index){
View view = layoutInflater.inflate(R.layout.tab_item_view, null);
ImageView p_w_picpathView = (ImageView) view.findViewById(R.id.iv_tabbar);
p_w_picpathView.setImageResource(mImageView[index]);
TextView textView = (TextView) view.findViewById(R.id.tv_tabbar);
textView.setText(mTextview[index]);
return view;
}
}
//================AdapterBase
public abstract class AdapterBase extends BaseAdapter {
protected List mList = new LinkedList();
public List getList(){
return mList;
}
public void appendToList(List list) {
if (list == null) {
return;
}
mList.addAll(list);
notifyDataSetChanged();
}
public void appendToTopList(List list) {
if (list == null) {
return;
}
mList.addAll(0, list);
notifyDataSetChanged();
}
public void setList(List list) {
if (list == null) {
return;
}
mList=list;
notifyDataSetChanged();
}
public void clear() {
mList.clear();
notifyDataSetChanged();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mList.size();
}
@Override
public T getItem(int position) {
// TODO Auto-generated method stub
if(position > mList.size()-1){
return null;
}
return mList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (position == getCount() - 1) {
onReachBottom();
}
return getExView(position, convertView, parent);
}
protected abstract View getExView(int position, View convertView, ViewGroup parent);
protected abstract void onReachBottom();
}
結束,分享