仿途牛旅游APP项目开发
用到的库有:
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项目开发相关推荐
- Android模仿途牛app源码,仿途牛旅游APP项目开发
用到的库有: android-support-v7-appcompat android-support-v7recyclerview drawee fbcore fresco FruitShop p_ ...
- 猿团项目实战-仿途牛旅行APP免费视频课程
途牛的产品丰富,性价比高,省心便捷,量身定制,双重保障等优势,让广大热爱旅行的朋友对途牛爱不释手,一有旅行的计划,就会选择上途牛.这让途牛这样的旅行APP开发者们更是觉得旅行APP开发是非常重要的. ...
- 技术总监之路——App项目开发流程
App项目开发流程 一. 需求阶段 1. 初期由leader或者项目责任人和PM沟通下阶段开发计划,确认需求的可行性和优先级等初步达成共识 2. 接下来PM提供详细UE文档(需求颗粒感尽可能小)发起三 ...
- APP项目开发失败案例经验汇总
今天和大家分享一下之前碰到比较典型的APP项目开发失败案例,教训是残酷的,经验是宝贵的,整理了三个案例,如果大家看完觉得还行,给个辛苦赞~ 失败的外包案例(一) 项目名称:XXXAPP开发双版本 项目 ...
- Mac App项目开发总结
Mac App项目开发总结 Launch Daemon守护进程 详细的Launch Daemon使用文档见官方文档,这里只简单介绍一下. Launch Daemon官方文档 1.Launch Daem ...
- 献给初学iOS的小盆友们------微博app项目开发之一项目初始化
献给初学iOS的小盆友们--微博app项目开发之一 项目初始化 本人自学iOS也有七八个月了,不敢说学到很深入了,但也算入了门.此次微博app项目参考了传智播客培训教材,主要学习内容有架构思想,封装思 ...
- 削履适足-途牛旅游网敏捷开发流程再造
削履适足-途牛旅游网敏捷开发流程再造 在互联网以"时新日异"快速发展的大背景下,更轻流程的敏捷开发成为了很多互联网开发团队的不二选择.然而,由于互联网区别于传统软件的反馈速度,使得 ...
- uniapp实战项目 (仿知识星球App) - - 配置开发工具和全局css样式
实战项目名称:仿知识星球App 技术栈:前端 => uni-app ( 后端:Node.js + Mysql + Apollo + Graphql ) 已实现功能:微信登录,创建星球,内容管理, ...
- android studio的旅游APP的开发和设计
一 项目概述 一直都想开发一个旅游APP程序,终于经过不懈的努力,最终完成该项目,项目有移动端,也就是APP客户端,有后台管理系统,后台管理系统是维护数据的,移动手机端是进行景区的预定门票的,该APP ...
最新文章
- python 类中定义类_Python中的动态类定义
- 什么叫PMP?项目管理的本质是什么?
- 探索JAVA并发 - 线程池详解
- html 只能输入正数,vue 限制input只能输入正数
- 腾讯网易音乐版权之争,拼的是什么?
- 贪心 赛码 1001 Movie
- 这 8款开源思维导图工具真的很神奇【程序员必备学习工具】
- 解决dos窗口启动Tomcat乱码问题
- 20172020图片对比_50张迷人的对比摄影照片作品
- 图片画圈画箭头用什么软件_什么软件可以在编辑图片中画圈圈,如裁图时需要特..._网络编辑_帮考网...
- mysql实现周月表_按天周月统计数据
- 判断对象内的 属性是否为空
- 深度模型(一):LSTM
- 笔记本更换固态硬盘的教程
- 基于UFEI下的win10 + Ubuntu18.04双系统攻略!!!
- Cookie、Session、Token、JWT 看一篇就够了
- 如何正确的进行亚马逊关键词研究
- 51单片机最小组成系统电路图[1080p高清]
- grpc环境配置 python_grpc| python 实战 grpc【h】
- 云应用数据备份及迁移方案
热门文章
- org.apache.catalina.loader.StandardClassLoader@1af33d6
- 在 Perl 中利用 DOM 和 XPath 对 XML 进行有效处理
- 解决PLSQL Developer 插入中文 乱码问题
- JavaScript错误信息
- 使用C# (.NET Core) 实现装饰模式 (Decorator Pattern) 并介绍 .NET/Core的Stream
- 使用内部(com.android.internal)和隐藏(@hide)API手记
- IEEE 物联网相关的标准
- 看小白如何解决ajax跨域问题
- 属于我的黑名单公司-传播杀意的地方
- 查询数据表中重复记录