用到的库有:

android-support-v7-appcompat

android-support-v7recyclerview

drawee

fbcore

fresco

FruitShop

p_w_picpathpipeline

p_w_picpathpipeline-base

p_w_picpathpipeline-okhttp

lib_BarCode

lib_CountdownView

lib_Mob_SMSSDK

lib_PullToRefresh_niu

lib_ViewPagerIndicator

lib_Weibo

lib_yuchen0612_bmobcompat

static-webp

主要代码:

public class FirstActivity extends FragmentActivity

{

private LinearLayout firstlin;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_first);

firstlin = (LinearLayout) findViewById(R.id.firstlinear);

firstlin.postDelayed(new Runnable()

{

public void run()

{

firstlin.setVisibility(View.VISIBLE);

firstlin.postDelayed(new Runnable()

{

public void run()

{

startActivity(new Intent(FirstActivity.this,MainActivity.class));

FirstActivity.this.finish();

}

}, 3000);

}

}, 3000)

;

}

}

public class MainActivity extends FragmentActivity

{

private FragmentTabHost mTabHost;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.fragment_main);

mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);

mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

mTabHost.addTab(mTabHost.newTabSpec("home").

setIndicator(getTabIndicator("首页", R.drawable.selector_home)),

HomeFragment.class, null);

mTabHost.addTab(mTabHost.newTabSpec("destination").

setIndicator(getTabIndicator("目的地", R.drawable.selector_dest)),

DestinationFragment.class, null);

mTabHost.addTab(mTabHost.newTabSpec("found").

setIndicator(getTabIndicator("发现", R.drawable.selector_found)),

FoundFragment.class, null);

mTabHost.addTab(mTabHost.newTabSpec("trip").

setIndicator(getTabIndicator("行程玩法", R.drawable.selector_trip)),

TripFragment.class, null);

mTabHost.addTab(mTabHost.newTabSpec("my").

setIndicator(getTabIndicator("我的", R.drawable.selector_my)),

MyFragment.class, null);

}

@SuppressLint("ResourceAsColor")

protected View getTabIndicator(String title,int id)

{

View layout = getLayoutInflater().inflate(R.layout.main_bottom, null);

TextView tv = (TextView) layout.findViewById(R.id.bottom_tv);

tv.setText(title);

ImageView img = (ImageView) layout.findViewById(R.id.bottom_img);

img.setImageResource(id);

return layout;

}

}

public class LogInActivity extends WeiboSSOActivity implements OnClickListener

{

private SharedPreferences sp;

private EditText user;

private EditText password;

private Editor edit;

@Override

public void finish()

{

super.finish();

overridePendingTransition(0, R.anim.tween_slide_out);

}

@Override

public void onClick(View v)

{

switch (v.getId())

{

case R.id.bt_login_back:// 退出

LogInActivity.this.finish();

break;

case R.id.iv_partner_sina:// 微博

wbLogin();

edit.putBoolean("user",false);

edit.commit();

LogInActivity.this.finish();

break;

case R.id.login_submit:// 微博

String uname = user.getText().toString();

String pw = password.getText().toString();

if(uname.equals("visen")&&pw.equals("123456"))

{

Toast.makeText(this, "登录成功",Toast.LENGTH_SHORT).show();

edit.putBoolean("user",true);

edit.commit();

LogInActivity.this.finish();

}else

{

edit.putBoolean("user",false);

edit.commit();

Toast.makeText(this, "用户或密码错误",Toast.LENGTH_SHORT).show();

}

break;

default:

break;

}

}

@Override

protected int getLayoutID()

{

return R.layout.activity_login;

}

@Override

protected void initUI()

{

sp = getSharedPreferences("data", 0);

edit = sp.edit();

user = (EditText) findViewById(R.id.login_id);

password = (EditText) findViewById(R.id.login_password);

Button submit = (Button) findViewById(R.id.login_submit);

ImageView back = (ImageView) findViewById(R.id.bt_login_back);

ImageView sina = (ImageView) findViewById(R.id.iv_partner_sina);

back.setOnClickListener(this);

sina.setOnClickListener(this);

submit.setOnClickListener(this);

}

@SuppressLint("CommitPrefEdits")

@Override

protected void getToken(String token)

{

edit.putString("token", getToken());

edit.putString("uid", getUid());

edit.commit();

}

}

public class DetileActivity extends FragmentActivity {

String str = "<昆大丽-香格里拉双飞8日游>家庭立减600元,骑行双廊,好评如潮,玉龙雪山普达措,赠温泉";

private ViewPager pager_detile;

private MyAdapter myAdapter;

private List<DefaultJourneyDetail> JourneyDetails;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_detile);

TextView tv_detile_title = (TextView)findViewById(R.id.tv_detile_title);

tv_detile_title.setText(str);

iniData();

iniPaper();

iniListview();

}

private void iniData() {

ApiClient.getDetilelist(this, new ResponseListener() {

@Override

public void onResponse(String arg0) {

Detile detile = GsonUtils.parseJSON(arg0, Detile.class);

Data data = detile.getData();

List<JourneyDetailList> journeyDetailList = data.getJourneyDetailList();

JourneyDetails = journeyDetailList.get(0).getDefaultJourneyDetail();

}

@Override

public void onErrorResponse(VolleyError arg0) {

}

});

}

private void iniListview()

{

ListView4ScrollView list_detile = (ListView4ScrollView) findViewById(R.id.list_detile);

myAdapter = new MyAdapter();

list_detile.setAdapter(myAdapter);

}

class MyAdapter extends BaseAdapter{

@Override

public int getCount() {

if (JourneyDetails != null) {

return JourneyDetails.size();

}

return 0;

}

@Override

public Object getItem(int arg0) {

return null;

}

@Override

public long getItemId(int arg0) {

return 0;

}

@SuppressLint({ "ViewHolder", "InflateParams" })

@Override

public View getView(int position, View arg1, ViewGroup arg2)

{

View inflate = getLayoutInflater().inflate(R.layout.list_item_detile, null);

TextView day = (TextView) inflate.findViewById(R.id.tv_day);

TextView food = (TextView) inflate.findViewById(R.id.tv_food);

TextView stay = (TextView) inflate.findViewById(R.id.tv_stay);

DefaultJourneyDetail defaultJourneyDetail2 = JourneyDetails.get(position);

day.setText(defaultJourneyDetail2.getJourneyName()+defaultJourneyDetail2.getJourneyDescription());

food.setText(defaultJourneyDetail2.getFoodAndStays().getFood());

stay.setText("住宿:"+defaultJourneyDetail2.getFoodAndStays().getStay());

return inflate;

}

}

private void iniPaper() {

pager_detile = (ViewPager)findViewById(R.id.pager_detile);

FragmentManager fm = getSupportFragmentManager();

PaperDetileAdapter paperAdapter = new PaperDetileAdapter(fm);

pager_detile.setAdapter(paperAdapter);

}

class PaperDetileAdapter extends FragmentStatePagerAdapter{

public PaperDetileAdapter(FragmentManager fm) {

super(fm);

}

@Override

public Fragment getItem(int position) {

return new DetileChildFragment(position);

}

@Override

public int getCount() {

return 5;

}

}

}

public class BarCodeActivity extends Activity

{

private TextView mTextView;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_bar_code);

mTextView = (TextView) findViewById(R.id.barcode_tv);

Intent openCameraIntent = new Intent(this, CaptureActivity.class);

startActivityForResult(openCameraIntent, 0);

}

public void barCodeCanle(View v)

{

BarCodeActivity.this.finish();

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data)

{

// 处理扫描结果(在界面上显示)

if (resultCode == RESULT_OK) {

Bundle bundle = data.getExtras();

String scanResult = bundle.getString("result");

mTextView.setText(scanResult);

}

}

}

public class SearchActivity extends Activity implements OnClickListener

{

private TextView cancle;

private TabHost mTabHost;

private ListView searchlv;

private TextView titleTv;

private EditText titleEdit;

private TextView showTv;

private List<Allcity> mAllcityList=new ArrayList<Allcity>();

private List<Hotcity> mHotcityList=new ArrayList<Hotcity>();

private ArrayList<String> mLetter=new ArrayList<String>();

private ArrayList<String> mSearchList=new ArrayList<String>();

private LetterView letterView;

private Runnable rn;

private MyAdapter myAdapter;

private ListView lvJing;

private GridHotAdapter hotAdapter;

private SearchAdapter searchAdapter;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_search);

initData();

initLetterView();

initTabHost();

initControlView();

}

private void initData()

{

ApiClient.getSearch(this, new ResponseListener()

{

@Override

public void onResponse(String arg0)

{

Cities cities = GsonUtils.parseJSON(arg0, Cities.class);

List<Hotcity> hotcity = cities.getHotcity();

mHotcityList.clear();

mHotcityList.addAll(hotcity);

List<Allcity> allcity = cities.getAllcity();

mAllcityList.clear();

mAllcityList.addAll(allcity);

hotAdapter.notifyDataSetChanged();

myAdapter.notifyDataSetChanged();

addLetter(allcity);

letterView.setLetter(mLetter);

}

@Override

public void onErrorResponse(VolleyError arg0)

{

Log.e("网络下载失败", "网络下载失败");

}

});

}

private void addLetter(List<Allcity> allcity)

{

mLetter.add("推荐");

mLetter.add("历史");

mLetter.add("热门");

for(int i=0;i<allcity.size();i++)

{

Allcity all = allcity.get(i);

String letter = getLetter(all);

if(!mLetter.contains(letter))

{

mLetter.add(letter);

}

}

}

@SuppressLint("DefaultLocale")

private String getLetter(Allcity all)

{

String pinyin = all.getPinyin();

String letter = pinyin.substring(0, 1).toUpperCase();

return letter;

}

private void initControlView()

{

showTv = (TextView) findViewById(R.id.search_jing_tv);

lvJing = (ListView) findViewById(R.id.search_lv_jing);

initHeadView();

myAdapter = new MyAdapter();

lvJing.setAdapter(myAdapter);

searchlv = (ListView) findViewById(R.id.search_listview);//搜索列表内容

searchlv.setOnItemClickListener(new OnItemClickListener()

{

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id)

{

startActivity(new Intent(SearchActivity.this,DetileActivity.class));

}

});

searchAdapter = new SearchAdapter();

searchlv.setAdapter(searchAdapter);

ImageView exit = (ImageView) findViewById(R.id.search_exit);

titleTv = (TextView) findViewById(R.id.search_titleTv);

titleEdit = (EditText) findViewById(R.id.search_edit);

titleEdit.addTextChangedListener(new TextWatcher()

{

@SuppressLint("DefaultLocale")

@Override

public void onTextChanged(CharSequence s, int start, int before, int count)

{

mSearchList.clear();

String input = s.toString().toLowerCase();

if(!TextUtils.isEmpty(input))

{

for(int i=0;i<mAllcityList.size();i++)

{

Allcity allcity = mAllcityList.get(i);

String name = allcity.getName();

String pyCity = allcity.getPinyin();

if(name.startsWith(input)||input.startsWith(pyCity))

{

mSearchList.add(name);

searchAdapter.notifyDataSetChanged();

}

}

}

searchAdapter.notifyDataSetChanged();

}

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after)

{

}

@Override

public void afterTextChanged(Editable s)

{

}

});

cancle = (TextView) findViewById(R.id.search_cancle);

exit.setOnClickListener(this);

titleTv.setOnClickListener(this);

cancle.setOnClickListener(this);

}

@SuppressLint("InflateParams")

private void initHeadView()

{

View headview=getLayoutInflater().inflate(R.layout.search_headview, null);

GridView4ScrollView gridHot = (GridView4ScrollView) headview.findViewById(R.id.search_grid02);

hotAdapter = new GridHotAdapter();

gridHot.setAdapter(hotAdapter);

lvJing.addHeaderView(headview);

}

class SearchAdapter extends BaseAdapter

{

@Override

public int getCount()

{

return mSearchList.size();

}

@Override

public Object getItem(int position)

{

return null;

}

@Override

public long getItemId(int position)

{

return 0;

}

@SuppressLint({ "ViewHolder", "InflateParams" })

@Override

public View getView(int position, View convertView, ViewGroup parent)

{

View searchlayout=getLayoutInflater().inflate(R.layout.search_firstletter_linear, null);

TextView firstletter = (TextView) searchlayout.findViewById(R.id.firstletter_tv);

firstletter.setVisibility(View.GONE);

TextView infro = (TextView) searchlayout.findViewById(R.id.letter_infro);

infro.setText(mSearchList.get(position));

return searchlayout;

}

}

class GridHotAdapter extends BaseAdapter

{

@Override

public int getCount()

{

return mHotcityList.size();

}

@Override

public Object getItem(int position)

{

return null;

}

@Override

public long getItemId(int position)

{

return 0;

}

@SuppressLint({ "ViewHolder", "InflateParams" })

@Override

public View getView(int position, View convertView, ViewGroup parent)

{

View gridLayout=getLayoutInflater().inflate(R.layout.headview5, null);

TextView tv = (TextView)gridLayout.findViewById(R.id.h5_tv);

tv.setTextSize(12);

Hotcity hotcity = mHotcityList.get(position);

tv.setText(hotcity.getName());

return gridLayout;

}

}

class MyAdapter extends BaseAdapter

{

@Override

public int getCount()

{

return mAllcityList.size();

}

@Override

public Object getItem(int position)

{

return null;

}

@Override

public long getItemId(int position)

{

return 0;

}

@SuppressLint({ "ViewHolder", "InflateParams" })

@Override

public View getView(int position, View convertView, ViewGroup parent)

{

View layout= getLayoutInflater().inflate(R.layout.search_firstletter_linear, null);

TextView firstletter = (TextView) layout.findViewById(R.id.firstletter_tv);

TextView infro = (TextView) layout.findViewById(R.id.letter_infro);

infro.setText(mAllcityList.get(position).getName());

if(mAllcityList.size()>0)

{

Allcity allcity = mAllcityList.get(position);

String first  = getLetter(allcity);

if(position==0)

{

firstletter.setVisibility(View.VISIBLE);

firstletter.setText(first);

}else

{

Allcity allcity2 = mAllcityList.get(position-1);

String next = getLetter(allcity2);

if(first.equals(next))

{

firstletter.setVisibility(View.GONE);

}else

{

firstletter.setVisibility(View.VISIBLE);

firstletter.setText(first);

}

}

}

return layout;

}

}

private void initLetterView()

{

letterView = (LetterView) findViewById(R.id.search_letterView);

rn = new Runnable() {

public void run() {

showTv.setVisibility(View.INVISIBLE);

}

};

letterView.setOnLetterTouchListener(new onLetterTouchListener()

{

@Override

public void onLetterTouchUp()

{

showTv.postDelayed(rn, 1000);

}

@Override

public void onLetterTouchDown(String letter)

{

showTv.removeCallbacks(rn);

showTv.setVisibility(View.VISIBLE);

showTv.setText(letter);

if(letter.equals("热门")||letter.equals("历史")||letter.equals("推荐"))

{

lvJing.setSelection(0);

}else

{

for(int i=0;i<mAllcityList.size();i++)

{

Allcity allcity = mAllcityList.get(i);

String first = getLetter(allcity);

if(first.equals(letter))

{

lvJing.setSelection(i+lvJing.getHeaderViewsCount());

break;

}

}

}

}

});

}

private void initTabHost()

{

mTabHost = (TabHost) findViewById(android.R.id.tabhost);

mTabHost.setup();

mTabHost.addTab(mTabHost.newTabSpec("jn").setContent(android.R.id.tabcontent).setIndicator(getInd("境内")));

}

@SuppressLint("InflateParams")

private View getInd(String str)

{

View view=getLayoutInflater().inflate(R.layout.search_tabhost_linear, null);

TextView tabTV = (TextView) view.findViewById(R.id.searchtab_tv);

tabTV.setText(str);

return view;

}

@Override

public void onClick(View v)

{

switch (v.getId())

{

case R.id.search_exit:

SearchActivity.this.finish();

break;

case R.id.search_titleTv:

titleTv.setVisibility(View.GONE);

titleEdit.setVisibility(View.VISIBLE);

searchlv.setVisibility(View.VISIBLE);

mTabHost.setVisibility(View.GONE);

cancle.setVisibility(View.VISIBLE);

break;

case R.id.search_cancle:

titleTv.setVisibility(View.VISIBLE);

titleEdit.setVisibility(View.GONE);

cancle.setVisibility(View.GONE);

searchlv.setVisibility(View.GONE);

mTabHost.setVisibility(View.VISIBLE);

break;

default:

break;

}

}

}

public class PhoneActivity extends Activity implements OnClickListener

{

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_phone);

findControl();

}

private void findControl()

{

LinearLayout missPhone = (LinearLayout) findViewById(R.id.phone_miss);

LinearLayout dialPhone = (LinearLayout) findViewById(R.id.phone_dial);

dialPhone.setOnClickListener(this);

missPhone.setOnClickListener(this);

}

@Override

public void onClick(View v)

{

switch (v.getId())

{

case R.id.phone_miss:

PhoneActivity.this.finish();

break;

case R.id.phone_dial:

Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:4007-999-999"));

startActivity(intent);

PhoneActivity.this.finish();

break;

default:

break;

}

}

@Override

public void finish()

{

super.finish();

overridePendingTransition(0, R.anim.tween_slide_out);

}

}

转载于:https://blog.51cto.com/1206995290qq/1850632

仿途牛旅游APP项目开发相关推荐

  1. Android模仿途牛app源码,仿途牛旅游APP项目开发

    用到的库有: android-support-v7-appcompat android-support-v7recyclerview drawee fbcore fresco FruitShop p_ ...

  2. 猿团项目实战-仿途牛旅行APP免费视频课程

    途牛的产品丰富,性价比高,省心便捷,量身定制,双重保障等优势,让广大热爱旅行的朋友对途牛爱不释手,一有旅行的计划,就会选择上途牛.这让途牛这样的旅行APP开发者们更是觉得旅行APP开发是非常重要的. ...

  3. 技术总监之路——App项目开发流程

    App项目开发流程 一. 需求阶段 1. 初期由leader或者项目责任人和PM沟通下阶段开发计划,确认需求的可行性和优先级等初步达成共识 2. 接下来PM提供详细UE文档(需求颗粒感尽可能小)发起三 ...

  4. APP项目开发失败案例经验汇总

    今天和大家分享一下之前碰到比较典型的APP项目开发失败案例,教训是残酷的,经验是宝贵的,整理了三个案例,如果大家看完觉得还行,给个辛苦赞~ 失败的外包案例(一) 项目名称:XXXAPP开发双版本 项目 ...

  5. Mac App项目开发总结

    Mac App项目开发总结 Launch Daemon守护进程 详细的Launch Daemon使用文档见官方文档,这里只简单介绍一下. Launch Daemon官方文档 1.Launch Daem ...

  6. 献给初学iOS的小盆友们------微博app项目开发之一项目初始化

    献给初学iOS的小盆友们--微博app项目开发之一 项目初始化 本人自学iOS也有七八个月了,不敢说学到很深入了,但也算入了门.此次微博app项目参考了传智播客培训教材,主要学习内容有架构思想,封装思 ...

  7. 削履适足-途牛旅游网敏捷开发流程再造

    削履适足-途牛旅游网敏捷开发流程再造 在互联网以"时新日异"快速发展的大背景下,更轻流程的敏捷开发成为了很多互联网开发团队的不二选择.然而,由于互联网区别于传统软件的反馈速度,使得 ...

  8. uniapp实战项目 (仿知识星球App) - - 配置开发工具和全局css样式

    实战项目名称:仿知识星球App 技术栈:前端 => uni-app ( 后端:Node.js + Mysql + Apollo + Graphql ) 已实现功能:微信登录,创建星球,内容管理, ...

  9. android studio的旅游APP的开发和设计

    一 项目概述 一直都想开发一个旅游APP程序,终于经过不懈的努力,最终完成该项目,项目有移动端,也就是APP客户端,有后台管理系统,后台管理系统是维护数据的,移动手机端是进行景区的预定门票的,该APP ...

最新文章

  1. python 类中定义类_Python中的动态类定义
  2. 什么叫PMP?项目管理的本质是什么?
  3. 探索JAVA并发 - 线程池详解
  4. html 只能输入正数,vue 限制input只能输入正数
  5. 腾讯网易音乐版权之争,拼的是什么?
  6. 贪心 赛码 1001 Movie
  7. 这 8款开源思维导图工具真的很神奇【程序员必备学习工具】
  8. 解决dos窗口启动Tomcat乱码问题
  9. 20172020图片对比_50张迷人的对比摄影照片作品
  10. 图片画圈画箭头用什么软件_什么软件可以在编辑图片中画圈圈,如裁图时需要特..._网络编辑_帮考网...
  11. mysql实现周月表_按天周月统计数据
  12. 判断对象内的 属性是否为空
  13. 深度模型(一):LSTM
  14. 笔记本更换固态硬盘的教程
  15. 基于UFEI下的win10 + Ubuntu18.04双系统攻略!!!
  16. Cookie、Session、Token、JWT 看一篇就够了
  17. 如何正确的进行亚马逊关键词研究
  18. 51单片机最小组成系统电路图[1080p高清]
  19. grpc环境配置 python_grpc| python 实战 grpc【h】
  20. 云应用数据备份及迁移方案

热门文章

  1. org.apache.catalina.loader.StandardClassLoader@1af33d6
  2. 在 Perl 中利用 DOM 和 XPath 对 XML 进行有效处理
  3. 解决PLSQL Developer 插入中文 乱码问题
  4. JavaScript错误信息
  5. 使用C# (.NET Core) 实现装饰模式 (Decorator Pattern) 并介绍 .NET/Core的Stream
  6. 使用内部(com.android.internal)和隐藏(@hide)API手记
  7. IEEE 物联网相关的标准
  8. 看小白如何解决ajax跨域问题
  9. 属于我的黑名单公司-传播杀意的地方
  10. 查询数据表中重复记录