Commit 1977857b by 倪力烽

1. 调入车辆、调出车辆接口测试完成

2. 模糊搜索尚未完成
3. EditText焦点变化还有问题
4. 该部分代码架构还需优化
parent ecb1f5eb
...@@ -22,21 +22,22 @@ ...@@ -22,21 +22,22 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme" > android:theme="@style/AppTheme" >
<!--<activity android:name=".LoginActivity" >--> <activity android:name=".LoginActivity" >
<!--<intent-filter>-->
<!--<action android:name="android.intent.action.MAIN" />-->
<!--<category android:name="android.intent.category.LAUNCHER" />-->
<!--</intent-filter>-->
<!--</activity>-->
<activity android:name=".MainActivity"
android:launchMode="singleTop">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".MainActivity"
android:launchMode="singleTop"
android:windowSoftInputMode="adjustNothing">
<!--<intent-filter>-->
<!--<action android:name="android.intent.action.MAIN" />-->
<!--<category android:name="android.intent.category.LAUNCHER" />-->
<!--</intent-filter>-->
</activity>
<activity <activity
android:name="com.google.zxing.client.android.CaptureActivity" android:name="com.google.zxing.client.android.CaptureActivity"
...@@ -49,6 +50,8 @@ ...@@ -49,6 +50,8 @@
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".SearchParkActivity"
android:launchMode="singleTop"/>
</application> </application>
</manifest> </manifest>
\ No newline at end of file
...@@ -429,7 +429,7 @@ public final class CaptureActivity extends Activity implements ...@@ -429,7 +429,7 @@ public final class CaptureActivity extends Activity implements
// historyManager.addHistoryItem(rawResult, resultHandler); // historyManager.addHistoryItem(rawResult, resultHandler);
// Then not from history, so beep/vibrate and we have an image to // Then not from history, so beep/vibrate and we have an image to
// draw on // draw on
beepManager.playBeepSoundAndVibrate(); // beepManager.playBeepSoundAndVibrate();
// drawResultPoints(barcode, scaleFactor, rawResult); // drawResultPoints(barcode, scaleFactor, rawResult);
Toast.makeText(this, "扫码成功", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "扫码成功", Toast.LENGTH_SHORT).show();
......
package com.senthink.ebike_administrer_tool; package com.senthink.ebike_administrer_tool;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.os.Bundle; import android.os.Bundle;
import android.support.design.widget.TabLayout; import android.support.design.widget.TabLayout;
...@@ -52,8 +54,8 @@ public class MainActivity extends BaseActivity { ...@@ -52,8 +54,8 @@ public class MainActivity extends BaseActivity {
TabLayout mTabLayout; TabLayout mTabLayout;
@BindView(R.id.viewpager) @BindView(R.id.viewpager)
ViewPager mViewPager; ViewPager mViewPager;
@BindView(R.id.main_toolbar) // @BindView(R.id.main_toolbar)
Toolbar mToolbar; // Toolbar mToolbar;
private TextView mExtraTv; private TextView mExtraTv;
private MyViewPagerAdapter viewPagerAdapter; private MyViewPagerAdapter viewPagerAdapter;
...@@ -61,7 +63,6 @@ public class MainActivity extends BaseActivity { ...@@ -61,7 +63,6 @@ public class MainActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main); setContentView(R.layout.layout_main);
// ButterKnife.bind(this);
initViews(); initViews();
} }
...@@ -81,7 +82,7 @@ public class MainActivity extends BaseActivity { ...@@ -81,7 +82,7 @@ public class MainActivity extends BaseActivity {
@Override @Override
public void onPageSelected(int position) { public void onPageSelected(int position) {
Fragment f = TAB_FRAGMENT[position]; Fragment f = TAB_FRAGMENT[position];
setExtraText(f); // setExtraText(f);
} }
@Override @Override
...@@ -97,24 +98,24 @@ public class MainActivity extends BaseActivity { ...@@ -97,24 +98,24 @@ public class MainActivity extends BaseActivity {
} }
}); });
mTabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager)); mTabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
mToolbar = (Toolbar) findViewById(R.id.main_toolbar); // mToolbar = (Toolbar) findViewById(R.id.main_toolbar);
setSupportActionBar(mToolbar); // setSupportActionBar(mToolbar);
mExtraTv = (TextView) mToolbar.findViewById(R.id.tv_extra_text); // mExtraTv = (TextView) mToolbar.findViewById(R.id.tv_extra_text);
mExtraTv.setText(getString(R.string.list)); // mExtraTv.setText(getString(R.string.list));
mExtraTv.setOnClickListener(new View.OnClickListener() { // mExtraTv.setOnClickListener(new View.OnClickListener() {
@Override // @Override
public void onClick(View v) { // public void onClick(View v) {
String text = mExtraTv.getText().toString(); // String text = mExtraTv.getText().toString();
if (text.equals(getString(R.string.list))) { // if (text.equals(getString(R.string.list))) {
// 如果是显示的列表,则执行 // // 如果是显示的列表,则执行
Log.i(TAG, "onClick: list" ); // Log.i(TAG, "onClick: list" );
}else if (text.equals(getString(R.string.submit))) { // }else if (text.equals(getString(R.string.submit))) {
//
}else if (text.equals(getString(R.string.logout))) { // }else if (text.equals(getString(R.string.logout))) {
finish(); // finish();
} // }
} // }
}); // });
// Log.i(TAG, "initViews: " + mToolbar.getChildCount()); // Log.i(TAG, "initViews: " + mToolbar.getChildCount());
} }
...@@ -187,4 +188,10 @@ public class MainActivity extends BaseActivity { ...@@ -187,4 +188,10 @@ public class MainActivity extends BaseActivity {
super.onDestroy(); super.onDestroy();
((MyApplication) UIUtils.getContext()).removeActivity(this); ((MyApplication) UIUtils.getContext()).removeActivity(this);
} }
public String getToken() {
SharedPreferences sharedPreferences = getSharedPreferences("loginUser", Context.MODE_PRIVATE);
String token = sharedPreferences.getString("token", null);
return token;
}
} }
package com.senthink.ebike_administrer_tool;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.senthink.ebike_administrer_tool.adapter.SearchParkAdapter;
import com.senthink.ebike_administrer_tool.asynchttp.AsyncHttp;
import com.senthink.ebike_administrer_tool.asynchttp.HttpCallback;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchIn;
import com.senthink.ebike_administrer_tool.bean.dispatch.SearchParkInfo;
import com.senthink.ebike_administrer_tool.common.CommonUrl;
import com.senthink.ebike_administrer_tool.widget.ClearEditText;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/13
*/
public class SearchParkActivity extends BaseActivity {
private ClearEditText et_search;
private ListView user_list;
private TextView mCancelTv;
private String[] data;
private ArrayAdapter<String> arrayAdapter;
private List<SearchParkInfo> mDatas = new ArrayList<>();
private SearchParkAdapter searchParkAdapter;
AsyncHttp http;
String token;
int userId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_search_park);
et_search = (ClearEditText) findViewById(R.id.et_input_parkname);
user_list = (ListView) findViewById(R.id.user_list);
mCancelTv = (TextView) findViewById(R.id.tv_cancel);
searchParkAdapter= new SearchParkAdapter(SearchParkActivity.this,mDatas);
http = new AsyncHttp(this);
getInfo();
user_list.setAdapter(searchParkAdapter);
et_search.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// user_list.setVisibility(View.VISIBLE);
}
});
mCancelTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(1001);
finish();
}
});
initData();
intiEditView();
}
private void intiEditView() {
et_search.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// if (s.length() >= 3) {
searchParkAdapter.getFilter().filter(s);
JSONObject obj = new JSONObject();
try {
obj.put("search",s);
obj.put("userId",342);
http.PostHttpClient(CommonUrl.SEARCH_PARK_INFO, token, obj, new HttpCallback() {
@Override
public void HttpCallbackResult(int code, JSONObject response) {
try {
String reponseCode = response.getString("code");
Log.i(TAG, "HttpCallbackResult: " + reponseCode);
Log.i(TAG, "HttpCallbackResult: " + code);
if (reponseCode.equals("8001")) {
JSONArray array = response.getJSONArray("data");
for (int i=0;i<array.length();i++) {
JSONObject obj = array.getJSONObject(i);
int id = obj.getInt("id");
String parkingName = obj.getString("parkingName");
String parkingCode = obj.getString("parkingCode");
int totalCarDigit = obj.getInt("totalCarDigit");
int reserveCarDigit = obj.getInt("reserveCarDigit");
DispatchIn in = new DispatchIn(id,parkingName,parkingCode,totalCarDigit,reserveCarDigit);
Log.i(TAG, "id: " + in.getCarId());
Log.i(TAG, "parkingName: " + in.getParkingNmae());
Log.i(TAG, "parkingCode: " + in.getParkingCode());
Log.i(TAG, "totalCarDigit: " + in.getTotalCarDigit());
Log.i(TAG, "reserveCarDigit: " + in.getReserveCarDigit());
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void HttpCallbackResult(int code, String response) {
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
// }
@Override
public void afterTextChanged(Editable s) {
}
});
}
public void initData() {
data = new String[]{"你好啊", "我会懂事", "啊大家看好", "手机的客户", "额外人", "阿斯顿",
"大家开心", "当年金额刘爽", "阿斯顿接口和"};
// SearchParkInfo user1 = new SearchParkInfo("你好啊");
// mDatas.add(user1);
// SearchParkInfo user2 = new SearchParkInfo( "我会懂事");
// mDatas.add(user2);
// SearchParkInfo user3 = new SearchParkInfo("啊大家看好");
// mDatas.add(user3);
// SearchParkInfo user4 = new SearchParkInfo("手机的客户");
// mDatas.add(user4);
// SearchParkInfo user5 = new SearchParkInfo("额外人");
// mDatas.add(user5);
// SearchParkInfo user6 = new SearchParkInfo("阿斯顿");
// mDatas.add(user6);
// SearchParkInfo user7 = new SearchParkInfo("大家开心");
// mDatas.add(user7);
// SearchParkInfo user8 = new SearchParkInfo("当年金额刘爽");
// mDatas.add(user8);
// SearchParkInfo user9 = new SearchParkInfo("阿斯顿接口和");
// mDatas.add(user9);
// SearchParkInfo user10 = new SearchParkInfo("阿斯顿接口和");
// mDatas.add(user10);
}
/**
* @Description 获取token和userId
* */
public void getInfo() {
SharedPreferences sharedPreferences = getSharedPreferences("loginUser", Context.MODE_PRIVATE);
token = sharedPreferences.getString("token", null);
userId = sharedPreferences.getInt("userId",0);
}
}
...@@ -9,6 +9,7 @@ import android.widget.ImageView; ...@@ -9,6 +9,7 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.senthink.ebike_administrer_tool.R; import com.senthink.ebike_administrer_tool.R;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchIn; import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchIn;
import java.util.List; import java.util.List;
...@@ -26,8 +27,8 @@ import butterknife.ButterKnife; ...@@ -26,8 +27,8 @@ import butterknife.ButterKnife;
public class DispatchInAdapter extends RecyclerView.Adapter<DispatchInAdapter.DispatchInViewHolder> { public class DispatchInAdapter extends RecyclerView.Adapter<DispatchInAdapter.DispatchInViewHolder> {
private Context mContext; private Context mContext;
private List<DispatchIn> mList; private List<DispatchCarInfo> mList;
public DispatchInAdapter(Context context, List<DispatchIn> mList) { public DispatchInAdapter(Context context, List<DispatchCarInfo> mList) {
this.mContext = context; this.mContext = context;
this.mList = mList; this.mList = mList;
} }
...@@ -40,7 +41,7 @@ public class DispatchInAdapter extends RecyclerView.Adapter<DispatchInAdapter.Di ...@@ -40,7 +41,7 @@ public class DispatchInAdapter extends RecyclerView.Adapter<DispatchInAdapter.Di
@Override @Override
public void onBindViewHolder(DispatchInViewHolder holder, final int position) { public void onBindViewHolder(DispatchInViewHolder holder, final int position) {
holder.mCarIdTv.setText(mList.get(position).getCarId()); holder.mCarIdTv.setText(mList.get(position).getVehicleNo());
holder.mDeleteIv.setOnClickListener(new View.OnClickListener() { holder.mDeleteIv.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
...@@ -69,4 +70,6 @@ public class DispatchInAdapter extends RecyclerView.Adapter<DispatchInAdapter.Di ...@@ -69,4 +70,6 @@ public class DispatchInAdapter extends RecyclerView.Adapter<DispatchInAdapter.Di
ButterKnife.bind(this,itemView); ButterKnife.bind(this,itemView);
} }
} }
} }
...@@ -6,11 +6,10 @@ import android.view.LayoutInflater; ...@@ -6,11 +6,10 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.senthink.ebike_administrer_tool.R; import com.senthink.ebike_administrer_tool.R;
import com.senthink.ebike_administrer_tool.bean.dispatch.Dispatchout; import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import java.util.List; import java.util.List;
...@@ -27,8 +26,8 @@ import butterknife.ButterKnife; ...@@ -27,8 +26,8 @@ import butterknife.ButterKnife;
public class DispatchOutAdapter extends RecyclerView.Adapter<DispatchOutAdapter.DispatchOutViewHolder> { public class DispatchOutAdapter extends RecyclerView.Adapter<DispatchOutAdapter.DispatchOutViewHolder> {
private Context mContext; private Context mContext;
private List<Dispatchout> mList; private List<DispatchCarInfo> mList;
public DispatchOutAdapter(Context context, List<Dispatchout> outList) { public DispatchOutAdapter(Context context, List<DispatchCarInfo> outList) {
this.mContext = context; this.mContext = context;
this.mList = outList; this.mList = outList;
} }
...@@ -41,8 +40,8 @@ public class DispatchOutAdapter extends RecyclerView.Adapter<DispatchOutAdapter. ...@@ -41,8 +40,8 @@ public class DispatchOutAdapter extends RecyclerView.Adapter<DispatchOutAdapter.
@Override @Override
public void onBindViewHolder(DispatchOutViewHolder holder, final int position) { public void onBindViewHolder(DispatchOutViewHolder holder, final int position) {
holder.mCarIdTv.setText(mList.get(position).getCarId()); holder.mCarIdTv.setText(mList.get(position).getVehicleNo());
holder.mParkIdTv.setText(mList.get(position).getParkId()); holder.mParkIdTv.setText(mList.get(position).getParkingCode());
holder.mDeleteIv.setOnClickListener(new View.OnClickListener() { holder.mDeleteIv.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
...@@ -73,13 +72,13 @@ public class DispatchOutAdapter extends RecyclerView.Adapter<DispatchOutAdapter. ...@@ -73,13 +72,13 @@ public class DispatchOutAdapter extends RecyclerView.Adapter<DispatchOutAdapter.
} }
} }
// public void setData(Dispatchout out){ // public void setData(DispatchCarInfo out){
// mList.add(out); // mList.add(out);
// notifyItemInserted(mList.size()-1); // notifyItemInserted(mList.size()-1);
// notifyItemChanged(mList.size()-1); // notifyItemChanged(mList.size()-1);
// } // }
// //
public void setData(List<Dispatchout> out) { public void setData(List<DispatchCarInfo> out) {
this.mList = out; this.mList = out;
notifyDataSetChanged(); notifyDataSetChanged();
} }
......
package com.senthink.ebike_administrer_tool.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
import com.senthink.ebike_administrer_tool.R;
import com.senthink.ebike_administrer_tool.bean.dispatch.SearchParkInfo;
import java.util.ArrayList;
import java.util.List;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/13
*/
public class SearchParkAdapter extends BaseAdapter implements Filterable {
private Context mContext;
/**
* Contains the list of objects that represent the data of this Adapter.
* Adapter数据源
*/
private List<SearchParkInfo> mDatas;
private LayoutInflater mInflater;
//过滤相关
/**
* This lock is also used by the filter
* (see {@link #getFilter()} to make a synchronized copy of
* the original array of data.
* 过滤器上的锁可以同步复制原始数据。
*/
private final Object mLock = new Object();
// A copy of the original mObjects array, initialized from and then used instead as soon as
// the mFilter ArrayFilter is used. mObjects will then only contain the filtered values.
//对象数组的备份,当调用ArrayFilter的时候初始化和使用。此时,对象数组只包含已经过滤的数据。
private ArrayList<SearchParkInfo> mOriginalValues;
private ArrayFilter mFilter;
public SearchParkAdapter(Context context, List<SearchParkInfo> datas) {
mContext = context;
mDatas = datas;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mDatas.size() > 0 ? mDatas.size() : 0;
}
@Override
public Object getItem(int position) {
return mDatas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_search_park_info, parent, false);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.tv_search_parkname);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
SearchParkInfo info = mDatas.get(position);
holder.name.setText(info.getParkName());
return convertView;
}
public class ViewHolder {
TextView name;
}
@Override
public Filter getFilter() {
if (mFilter == null) {
mFilter = new ArrayFilter();
}
return mFilter;
}
/**
* 过滤数据的类
*/
/**
* <p>An array filter constrains the content of the array adapter with
* a prefix. Each item that does not start with the supplied prefix
* is removed from the list.</p>
* <p/>
* 一个带有首字母约束的数组过滤器,每一项不是以该首字母开头的都会被移除该list。
*/
private class ArrayFilter extends Filter {
//执行刷选
@Override
protected Filter.FilterResults performFiltering(CharSequence prefix) {
FilterResults results = new FilterResults();//过滤的结果
//原始数据备份为空时,上锁,同步复制原始数据
if (mOriginalValues == null) {
synchronized (mLock) {
mOriginalValues = new ArrayList<>(mDatas);
}
}
//当首字母为空时
if (prefix == null || prefix.length() == 0) {
ArrayList<SearchParkInfo> list;
synchronized (mLock) {//同步复制一个原始备份数据
list = new ArrayList<>(mOriginalValues);
}
results.values = list;
results.count = list.size();//此时返回的results就是原始的数据,不进行过滤
} else {
String prefixString = prefix.toString().toLowerCase();//转化为小写
ArrayList<SearchParkInfo> values;
synchronized (mLock) {//同步复制一个原始备份数据
values = new ArrayList<>(mOriginalValues);
}
final int count = values.size();
final ArrayList<SearchParkInfo> newValues = new ArrayList<>();
for (int i = 0; i < count; i++) {
final SearchParkInfo value = values.get(i);//从List<User>中拿到User对象
// final String valueText = value.toString().toLowerCase();
final String valueText = value.getParkName().toString().toLowerCase();//User对象的name属性作为过滤的参数
// First match against the whole, non-splitted value
if (valueText.startsWith(prefixString) || valueText.indexOf(prefixString.toString()) != -1) {//第一个字符是否匹配
newValues.add(value);//将这个item加入到数组对象中
} else {//处理首字符是空格
final String[] words = valueText.split(" ");
final int wordCount = words.length;
// Start at index 0, in case valueText starts with space(s)
for (int k = 0; k < wordCount; k++) {
if (words[k].startsWith(prefixString)) {//一旦找到匹配的就break,跳出for循环
newValues.add(value);
break;
}
}
}
}
results.values = newValues;//此时的results就是过滤后的List<User>数组
results.count = newValues.size();
}
return results;
}
//刷选结果
@Override
protected void publishResults(CharSequence prefix, FilterResults results) {
//noinspection unchecked
mDatas = (List<SearchParkInfo>) results.values;//此时,Adapter数据源就是过滤后的Results
if (results.count > 0) {
notifyDataSetChanged();//这个相当于从mDatas中删除了一些数据,只是数据的变化,故使用notifyDataSetChanged()
} else {
/**
* 数据容器变化 ----> notifyDataSetInValidated
容器中的数据变化 ----> notifyDataSetChanged
*/
notifyDataSetInvalidated();//当results.count<=0时,此时数据源就是重新new出来的,说明原始的数据源已经失效了
}
}
}
}
...@@ -292,6 +292,63 @@ public class AsyncHttp { ...@@ -292,6 +292,63 @@ public class AsyncHttp {
} }
} }
public void PostHttpClient(String url, String token, String str,
final HttpCallback callback) {
try {
StringEntity entity = new StringEntity(str, "utf-8");
entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
asyncClient.post(mcontext, token,url, entity, null,
new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers,
JSONObject response) {
// TODO Auto-generated method stub
callback.HttpCallbackResult(statusCode, response);
}
@Override
public void onSuccess(int statusCode, Header[] headers,
String responseString) {
// TODO Auto-generated method stub
callback.HttpCallbackResult(statusCode,
responseString);
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONObject errorResponse) {
// TODO Auto-generated method stub
callback.HttpCallbackResult(statusCode,
errorResponse);
Log.i("appLog", "statusCode=" + statusCode);
Log.i("appLog", "headers=" + headers);
Log.i("appLog", "throwable=" + throwable.toString());
Log.i("appLog", "errorResponse=" + errorResponse);
}
@Override
public void onFailure(int statusCode, Header[] headers,
String responseString, Throwable throwable) {
// TODO Auto-generated method stub
callback.HttpCallbackResult(statusCode,
responseString);
Log.i("appLog", "statusCode=" + statusCode);
Log.i("appLog", "headers=" + headers);
Log.i("appLog", "throwable=" + throwable.toString());
Log.i("appLog", "responseString=" + responseString);
}
});
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void PutHttpClient(String url, RequestParams params, public void PutHttpClient(String url, RequestParams params,
final HttpCallback callback) { final HttpCallback callback) {
try { try {
......
package com.senthink.ebike_administrer_tool.bean.dispatch;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/11
*/
public class DispatchCarInfo {
private int id;
private String vehicleNo;
private String parkingCode;
public int getId() {
return id;
}
public String getParkingCode() {
return parkingCode;
}
public String getVehicleNo() {
return vehicleNo;
}
public void setId(int id) {
this.id = id;
}
public void setParkingCode(String parkingCode) {
this.parkingCode = parkingCode;
}
public void setVehicleNo(String vehicleNo) {
this.vehicleNo = vehicleNo;
}
}
...@@ -8,13 +8,56 @@ package com.senthink.ebike_administrer_tool.bean.dispatch; ...@@ -8,13 +8,56 @@ package com.senthink.ebike_administrer_tool.bean.dispatch;
*/ */
public class DispatchIn { public class DispatchIn {
private String carId; private int parkId;
private String parkingNmae;
private String parkingCode;
private int totalCarDigit; // 对应原型图上的额定车位数
private int reserveCarDigit; // totalCarDigit + reserveCarDigit 对应原型图上的最多停车数
public String getCarId() { public DispatchIn(int parkId,String parkingNmae,String parkingCode,int totalCarDigit,int reserveCarDigit) {
return carId; this.parkId = parkId;
this.parkingNmae = parkingNmae;
this.parkingCode = parkingCode;
this.totalCarDigit = totalCarDigit;
this.reserveCarDigit = reserveCarDigit;
}
public int getCarId() {
return parkId;
}
public void setCarId(int parkId) {
this.parkId = parkId;
}
public void setParkingCode(String parkingCode) {
this.parkingCode = parkingCode;
}
public String getParkingCode() {
return parkingCode;
}
public void setParkingNmae(String parkingNmae) {
this.parkingNmae = parkingNmae;
}
public int getReserveCarDigit() {
return reserveCarDigit;
}
public void setReserveCarDigit(int reserveCarDigit) {
this.reserveCarDigit = reserveCarDigit;
}
public int getTotalCarDigit() {
return totalCarDigit;
}
public void setTotalCarDigit(int totalCarDigit) {
this.totalCarDigit = totalCarDigit;
} }
public void setCarId(String carId) { public String getParkingNmae() {
this.carId = carId; return parkingNmae;
} }
} }
package com.senthink.ebike_administrer_tool.bean.dispatch;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/11
*/
public class Dispatchout {
private String carId;
private String parkId;
public String getCarId() {
return carId;
}
public String getParkId() {
return parkId;
}
public void setCarId(String carId) {
this.carId = carId;
}
public void setParkId(String parkId) {
this.parkId = parkId;
}
}
package com.senthink.ebike_administrer_tool.bean.dispatch;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/13
*/
public class SearchParkInfo {
private String parkName;
private int id;
public SearchParkInfo(String parkName,int id) {
this.parkName = parkName;
this.id = id;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public String getParkName() {
return parkName;
}
public void setParkName(String parkName) {
this.parkName = parkName;
}
}
...@@ -9,6 +9,16 @@ package com.senthink.ebike_administrer_tool.common; ...@@ -9,6 +9,16 @@ package com.senthink.ebike_administrer_tool.common;
public class CommonUrl { public class CommonUrl {
public static final String LOGIN_URL = "http://10.200.2.109:9051/auth"; public static final String LOGIN_URL = "http://10.200.2.109:9051/auth";
/** 修改密码接口 */
public static final String MODIFY_PASSWORD_URL = "http://10.200.2.109:9051/challenger/app/user/updatePass"; public static final String MODIFY_PASSWORD_URL = "http://10.200.2.109:9051/challenger/app/user/updatePass";
/** 获取用户信息接口 */
public static final String GET_USER_INFO_URL = "http://10.200.2.109:9011/challenger/app/user/me/"; public static final String GET_USER_INFO_URL = "http://10.200.2.109:9011/challenger/app/user/me/";
/** 根据车架号获取车辆编号以及停车点编号的接口 */
public static final String GET_CAR_PARK_INFO = "http://10.200.2.109:9041/discovery/app/vehicle/";
/** 调出停车点 */
public static final String DISPATCH_OUT_SUBMIT = "http://10.200.2.109:9041/discovery/app/operation/dispatchOut";
/** 调入停车点 */
public static final String DISPATCH_IN_SUBMIT = "http://10.200.2.109:9041/discovery/app/operation/dispatchIn";
/** 模糊搜索停车点 */
public static final String SEARCH_PARK_INFO = "http://10.200.2.109:9041/discovery/app/operation/searchParkingInfo";
} }
package com.senthink.ebike_administrer_tool.fragment; package com.senthink.ebike_administrer_tool.fragment;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout; import android.support.design.widget.TabLayout;
...@@ -7,6 +9,8 @@ import android.support.v4.app.Fragment; ...@@ -7,6 +9,8 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
...@@ -47,7 +51,12 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{ ...@@ -47,7 +51,12 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{
RadioButton mLeftRb; RadioButton mLeftRb;
@BindView(R.id.rb_right) @BindView(R.id.rb_right)
RadioButton mRightRb; RadioButton mRightRb;
@BindView(R.id.dispatch_toolbar)
Toolbar mToolbar;
TextView mSubmitTv;
private String token;
Fragment mCurrentFragment;
private int index = 0;
private static final String TAG = DispatchFragment.class.getSimpleName(); private static final String TAG = DispatchFragment.class.getSimpleName();
private FragmentPagerAdapter adapter; private FragmentPagerAdapter adapter;
@Nullable @Nullable
...@@ -65,6 +74,7 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{ ...@@ -65,6 +74,7 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{
adapter = new FragmentPagerAdapter(getChildFragmentManager()) { adapter = new FragmentPagerAdapter(getChildFragmentManager()) {
@Override @Override
public Fragment getItem(int position) { public Fragment getItem(int position) {
mCurrentFragment = TAB_FRAGMENT[position];
return TAB_FRAGMENT[position]; return TAB_FRAGMENT[position];
} }
...@@ -82,7 +92,16 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{ ...@@ -82,7 +92,16 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{
@Override @Override
public void onPageSelected(int position) { public void onPageSelected(int position) {
Log.i(TAG, "onPageSelected: " + position); index = position;
Log.i(TAG, "onPageSelected: ");
if (position == 0) {
mLeftRb.setChecked(true);
mRightRb.setChecked(false);
}else if (position == 1) {
mLeftRb.setChecked(false);
mRightRb.setChecked(true);
}
} }
@Override @Override
...@@ -90,12 +109,18 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{ ...@@ -90,12 +109,18 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{
} }
}); });
mViewPager.setCurrentItem(0); mViewPager.setCurrentItem(index);
token = getToken();
} }
private void initView() { private void initView() {
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(mToolbar);
setHasOptionsMenu(true);
mLeftRb.setOnClickListener(this); mLeftRb.setOnClickListener(this);
mRightRb.setOnClickListener(this); mRightRb.setOnClickListener(this);
mSubmitTv = (TextView) mToolbar.findViewById(R.id.tv_submit);
mSubmitTv.setOnClickListener(this);
} }
@Override @Override
...@@ -108,9 +133,25 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{ ...@@ -108,9 +133,25 @@ public class DispatchFragment extends Fragment implements View.OnClickListener{
case R.id.rb_right: case R.id.rb_right:
mViewPager.setCurrentItem(1); mViewPager.setCurrentItem(1);
break; break;
case R.id.tv_submit:
if (index == 0) {
DispatchOutFragment d = (DispatchOutFragment) adapter.getItem(index);
d.submit(token);
}else if (index == 1) {
DispatchInFragment d = (DispatchInFragment) adapter.getItem(index);
d.submit(token);
}
break;
} }
} }
/**
* @Description 获取token
* */
public String getToken() {
SharedPreferences sharedPreferences = getActivity().getSharedPreferences("loginUser", Context.MODE_PRIVATE);
String token = sharedPreferences.getString("token", null);
return token;
}
} }
package com.senthink.ebike_administrer_tool.fragment; package com.senthink.ebike_administrer_tool.fragment;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.google.zxing.client.android.CaptureActivity;
import com.senthink.ebike_administrer_tool.R; import com.senthink.ebike_administrer_tool.R;
import com.senthink.ebike_administrer_tool.SearchParkActivity;
import com.senthink.ebike_administrer_tool.adapter.DispatchInAdapter; import com.senthink.ebike_administrer_tool.adapter.DispatchInAdapter;
import com.senthink.ebike_administrer_tool.adapter.DispatchOutAdapter; import com.senthink.ebike_administrer_tool.adapter.SearchParkAdapter;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchIn; import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchIn;
import com.senthink.ebike_administrer_tool.bean.dispatch.SearchParkInfo;
import com.senthink.ebike_administrer_tool.presenter.impl.DispatchInPresenterImpl;
import com.senthink.ebike_administrer_tool.presenter.impl.DispatchOutPresenterImpl;
import com.senthink.ebike_administrer_tool.view.IDispatchFragment; import com.senthink.ebike_administrer_tool.view.IDispatchFragment;
import com.senthink.ebike_administrer_tool.widget.ClearEditText;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -29,11 +52,23 @@ import butterknife.ButterKnife; ...@@ -29,11 +52,23 @@ import butterknife.ButterKnife;
*/ */
public class DispatchInFragment extends Fragment implements IDispatchFragment{ public class DispatchInFragment extends Fragment implements IDispatchFragment{
private DispatchIn in = new DispatchIn(); private List<DispatchCarInfo> mList = new ArrayList<>();
private List<DispatchIn> mList = new ArrayList<>();
@BindView(R.id.recycleView_dispatch_in) @BindView(R.id.recycleView_dispatch_in)
RecyclerView recyclerView; RecyclerView recyclerView;
@BindView(R.id.btn_dispatch_in_scan)
Button scanInBtn;
@BindView(R.id.et_input_parkname)
EditText searchText;
private DispatchInAdapter mAdapter; private DispatchInAdapter mAdapter;
DispatchInPresenterImpl presenter;
private static final int REQUEST_CODE = 1000;
private List<Integer> idList = new ArrayList<>();
private List<String> shellList = new ArrayList<>(); // 车架号列表
private static final int ACTION_SCAN_BARCODE = 1001;
private static final String TAG = DispatchInFragment.class.getSimpleName();
private Dialog dialog;
private View inflate;
@Nullable @Nullable
@Override @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
...@@ -46,16 +81,33 @@ public class DispatchInFragment extends Fragment implements IDispatchFragment{ ...@@ -46,16 +81,33 @@ public class DispatchInFragment extends Fragment implements IDispatchFragment{
@Override @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
for (int i = 0;i<10;i++) { scanInBtn.setOnClickListener(new View.OnClickListener() {
in.setCarId("1234556"); @Override
mList.add(in); public void onClick(View v) {
scan();
} }
});
LinearLayoutManager layout = new LinearLayoutManager(getActivity()); LinearLayoutManager layout = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layout); recyclerView.setLayoutManager(layout);
mAdapter = new DispatchInAdapter(getActivity(),mList); mAdapter = new DispatchInAdapter(getActivity(),mList);
recyclerView.setAdapter(mAdapter); recyclerView.setAdapter(mAdapter);
presenter = new DispatchInPresenterImpl(this);
searchText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
Intent intent = new Intent();
intent.setClass(getActivity(), SearchParkActivity.class);
startActivityForResult(intent, Activity.RESULT_FIRST_USER);
} }
}
});
}
@Override @Override
public void getInformationFailed(String msg) { public void getInformationFailed(String msg) {
...@@ -68,16 +120,69 @@ public class DispatchInFragment extends Fragment implements IDispatchFragment{ ...@@ -68,16 +120,69 @@ public class DispatchInFragment extends Fragment implements IDispatchFragment{
@Override @Override
public void scan() { public void scan() {
Intent intent = new Intent();
intent.setClass(getActivity(), CaptureActivity.class);
startActivityForResult(intent, ACTION_SCAN_BARCODE);
} }
@Override @Override
public void updateInfo() { public void updateInfo(DispatchCarInfo out) {
mList.add(out);
mAdapter.notifyItemInserted(mList.size() - 1);
} }
@Override @Override
public void submitSuccess() { public void submitSuccess() {
dialog = new Dialog(getContext(),R.style.modify_psw_dialog);
inflate = LayoutInflater.from(getContext()).inflate(R.layout.layout_dialog_success,null);
dialog.setContentView(inflate);
Window dialogWindow = dialog.getWindow();
dialogWindow.setGravity( Gravity.CENTER);
WindowManager m = getActivity().getWindowManager();
Display d = m.getDefaultDisplay();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = (int) (d.getWidth() * 0.64);
lp.height = (int) (d.getHeight() * 0.25);
//// lp.y = 20;
dialogWindow.setAttributes(lp);
dialog.show();
shellList.clear();
}
@Override
public void submitFailed(List<Integer> list) {
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTION_SCAN_BARCODE
&& resultCode == 1070) {
String shellId = data.getStringExtra("codedContent");
Log.i(TAG, "onActivityResult: " + shellId);
if (shellList.contains(shellId)) {
// 判断该车架号是否被扫描过
Toast.makeText(getActivity(), "该车辆已扫描,请扫描其他车辆", Toast.LENGTH_SHORT).show();
return;
}else {
shellList.add(shellId);
presenter.getCarInfo(shellId);
}
}
}
public void submit(String token) {
for (DispatchCarInfo info : mList) {
idList.add(info.getId());
}
// 没有车时不进行post请求
if (mList.size()>0) {
presenter.submit(idList,2,token);
Log.i(TAG, "submit: " + mList.size());
}else {
Toast.makeText(getActivity(),getString(R.string.no_car),Toast.LENGTH_SHORT).show();
}
} }
} }
package com.senthink.ebike_administrer_tool.fragment; package com.senthink.ebike_administrer_tool.fragment;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent; import android.content.Intent;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.Log; import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.zxing.client.android.CaptureActivity; import com.google.zxing.client.android.CaptureActivity;
import com.senthink.ebike_administrer_tool.R; import com.senthink.ebike_administrer_tool.R;
import com.senthink.ebike_administrer_tool.adapter.DispatchOutAdapter; import com.senthink.ebike_administrer_tool.adapter.DispatchOutAdapter;
import com.senthink.ebike_administrer_tool.bean.dispatch.Dispatchout; import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import com.senthink.ebike_administrer_tool.common.Common; import com.senthink.ebike_administrer_tool.presenter.impl.DispatchOutPresenterImpl;
import com.senthink.ebike_administrer_tool.presenter.impl.DIspatchOutPresenterImpl;
import com.senthink.ebike_administrer_tool.view.IDispatchFragment; import com.senthink.ebike_administrer_tool.view.IDispatchFragment;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -43,21 +51,20 @@ public class DispatchOutFragment extends Fragment implements IDispatchFragment { ...@@ -43,21 +51,20 @@ public class DispatchOutFragment extends Fragment implements IDispatchFragment {
Button scanBtn; Button scanBtn;
DispatchOutAdapter mAdapter; DispatchOutAdapter mAdapter;
DIspatchOutPresenterImpl presenter; DispatchOutPresenterImpl presenter;
private static final String TAG = DispatchFragment.class.getSimpleName(); private static final String TAG = DispatchFragment.class.getSimpleName();
private Dispatchout out = new Dispatchout(); private DispatchCarInfo out = new DispatchCarInfo();
private List<Dispatchout> mList = new ArrayList<>(); private List<DispatchCarInfo> mList = new ArrayList<>();
private List<String> shellList = new ArrayList<>(); // 车架号列表
private List<Integer> idList = new ArrayList<>();
private static final int ACTION_SCAN_BARCODE = 1001; private static final int ACTION_SCAN_BARCODE = 1001;
private Dialog dialog;
private View inflate;
@Nullable @Nullable
@Override @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_dispatch_out,container,false); View view = inflater.inflate(R.layout.fragment_dispatch_out,container,false);
ButterKnife.bind(this,view); ButterKnife.bind(this,view);
for (int i = 0; i<10; i++) {
out.setCarId("11111111");
out.setParkId("00000000");
mList.add(out);
}
return view; return view;
} }
...@@ -74,7 +81,7 @@ public class DispatchOutFragment extends Fragment implements IDispatchFragment { ...@@ -74,7 +81,7 @@ public class DispatchOutFragment extends Fragment implements IDispatchFragment {
} }
private void initData() { private void initData() {
presenter = new DIspatchOutPresenterImpl(this); presenter = new DispatchOutPresenterImpl(this);
LinearLayoutManager layout = new LinearLayoutManager(getActivity()); LinearLayoutManager layout = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layout); recyclerView.setLayoutManager(layout);
...@@ -95,26 +102,45 @@ public class DispatchOutFragment extends Fragment implements IDispatchFragment { ...@@ -95,26 +102,45 @@ public class DispatchOutFragment extends Fragment implements IDispatchFragment {
@Override @Override
public void scan() { public void scan() {
// out.setParkId("123");
// out.setCarId("3123");
// mList.add(out);
//// mAdapter.setData(mList);
// mAdapter.notifyItemInserted(mList.size()-1);
// mAdapter.notifyItemRangeChanged(mList.size()-1,mList.size()-1);
Intent intent = new Intent(); Intent intent = new Intent();
intent.setClass(getActivity(), CaptureActivity.class); intent.setClass(getActivity(), CaptureActivity.class);
startActivityForResult(intent, ACTION_SCAN_BARCODE); startActivityForResult(intent, ACTION_SCAN_BARCODE);
} }
@Override @Override
public void updateInfo() { public void updateInfo(DispatchCarInfo out) {
// TODO: 2017/6/12 获取数据 // TODO: 2017/6/12 获取数据
Log.i(TAG, "updateInfo: "); Log.i(TAG, "updateInfo: ");
mList.add(out);
mAdapter.notifyItemInserted(mList.size() - 1);
} }
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override @Override
public void submitSuccess() { public void submitSuccess() {
dialog = new Dialog(getContext(),R.style.modify_psw_dialog);
inflate = LayoutInflater.from(getContext()).inflate(R.layout.layout_dialog_success,null);
dialog.setContentView(inflate);
Window dialogWindow = dialog.getWindow();
dialogWindow.setGravity( Gravity.CENTER);
WindowManager m = getActivity().getWindowManager();
Display d = m.getDefaultDisplay();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.width = (int) (d.getWidth() * 0.64);
lp.height = (int) (d.getHeight() * 0.25);
//// lp.y = 20;
dialogWindow.setAttributes(lp);
dialog.show();
mList.clear();
mAdapter.notifyDataSetChanged();
shellList.clear();
}
@Override
public void submitFailed(List<Integer> list) {
for (int i : list) {
}
} }
@Override @Override
...@@ -122,7 +148,29 @@ public class DispatchOutFragment extends Fragment implements IDispatchFragment { ...@@ -122,7 +148,29 @@ public class DispatchOutFragment extends Fragment implements IDispatchFragment {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTION_SCAN_BARCODE if (requestCode == ACTION_SCAN_BARCODE
&& resultCode == 1070) { && resultCode == 1070) {
String shellId = data.getStringExtra("codedContent");
Log.i(TAG, "onActivityResult: " + shellId);
if (shellList.contains(shellId)) {
// 判断该车架号是否被扫描过
Toast.makeText(getActivity(), "该车辆已扫描,请扫描其他车辆", Toast.LENGTH_SHORT).show();
return;
}else {
shellList.add(shellId);
presenter.getCarInfo(shellId);
}
}
} }
public void submit(String token) {
for (DispatchCarInfo info : mList) {
idList.add(info.getId());
}
// 没有车时不进行post请求
if (mList.size()>0) {
presenter.submit(idList,token);
Log.i(TAG, "submit: " + mList.size());
}else {
Toast.makeText(getActivity(),getString(R.string.no_car),Toast.LENGTH_SHORT).show();
}
} }
} }
...@@ -4,10 +4,13 @@ import android.app.AlertDialog; ...@@ -4,10 +4,13 @@ import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log; import android.util.Log;
import android.view.Display; import android.view.Display;
import android.view.Gravity; import android.view.Gravity;
...@@ -22,6 +25,7 @@ import android.widget.ImageView; ...@@ -22,6 +25,7 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.senthink.ebike_administrer_tool.LoginActivity;
import com.senthink.ebike_administrer_tool.MyApplication; import com.senthink.ebike_administrer_tool.MyApplication;
import com.senthink.ebike_administrer_tool.R; import com.senthink.ebike_administrer_tool.R;
import com.senthink.ebike_administrer_tool.bean.userInfo.GetUserInfoById; import com.senthink.ebike_administrer_tool.bean.userInfo.GetUserInfoById;
...@@ -53,6 +57,9 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra ...@@ -53,6 +57,9 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra
TextView mUserNmaeTv; TextView mUserNmaeTv;
@BindView(R.id.iv_modify_password) @BindView(R.id.iv_modify_password)
ImageView mModifyPswIv; ImageView mModifyPswIv;
@BindView(R.id.me_toolbar)
Toolbar mToolbar;
private TextView mLogoutTv;
private Dialog dialog; private Dialog dialog;
private Button confirmBtn; private Button confirmBtn;
...@@ -64,17 +71,18 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra ...@@ -64,17 +71,18 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra
@Nullable @Nullable
@Override @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_me,container,false); View view = inflater.inflate(R.layout.fragment_me,container,false);
ButterKnife.bind(this,view);
setHasOptionsMenu(true);
((AppCompatActivity) getActivity()).setSupportActionBar(mToolbar);
return view;
} }
@Override @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this,view);
initData(); initData();
initView(); initView();
} }
private void initView() { private void initView() {
...@@ -86,7 +94,7 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra ...@@ -86,7 +94,7 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra
* */ * */
private void initData() { private void initData() {
myInforPresenter = new MyInforPresenterImpl(this); myInforPresenter = new MyInforPresenterImpl(this);
myInforPresenter.getUserInfo("xjl"); myInforPresenter.getUserInfo(getUserName());
} }
/** /**
...@@ -127,6 +135,8 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra ...@@ -127,6 +135,8 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra
String password = sharedPreferences.getString("password",""); String password = sharedPreferences.getString("password","");
user.setLoginName(loginName); user.setLoginName(loginName);
user.setPassword(password); user.setPassword(password);
saveUserId(user.getId());
if (user.getRealName().equals("null")) { if (user.getRealName().equals("null")) {
mRealNameTv.setText("null"); mRealNameTv.setText("null");
}else { }else {
...@@ -140,6 +150,18 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra ...@@ -140,6 +150,18 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra
mPasswordTv.setText(password); // 设置密码 mPasswordTv.setText(password); // 设置密码
mUserNmaeTv.setText(loginName); mUserNmaeTv.setText(loginName);
} }
/**
* @Description 保存用户id
* @param id 用户id
* */
private void saveUserId(int id) {
SharedPreferences sharedPreferences1 = getContext().getSharedPreferences("loginUser",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences1.edit();
editor.putInt("userId",id);
editor.commit();
}
/** /**
* @Description 密码修改成功 * @Description 密码修改成功
* */ * */
...@@ -230,4 +252,11 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra ...@@ -230,4 +252,11 @@ public class MyInformationFragment extends Fragment implements IMyInformationFra
dialogWindow.setAttributes(lp); dialogWindow.setAttributes(lp);
dialog.show(); dialog.show();
} }
public String getUserName(){
SharedPreferences preferences = getActivity()
.getSharedPreferences(Common.LOGIN_USER_SHAREDPREFERENCE,Context.MODE_PRIVATE);
String userName = preferences.getString(Common.USER_NAME_SHAREDPREFERENCE,null);
return userName;
}
} }
package com.senthink.ebike_administrer_tool.model;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchInSearchCallback;
import java.util.List;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/12
*/
public interface DispatchInModel extends DispatchModel {
void search(String search, int userId, DispatchInSearchCallback callback);
void submit(List<Integer> mList, int parkId, String token, DispatchCallback callback);
}
...@@ -2,6 +2,8 @@ package com.senthink.ebike_administrer_tool.model; ...@@ -2,6 +2,8 @@ package com.senthink.ebike_administrer_tool.model;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback; import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback;
import java.util.List;
/** /**
* @Description : * @Description :
* @Author : ni * @Author : ni
...@@ -9,8 +11,6 @@ import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallb ...@@ -9,8 +11,6 @@ import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallb
* @Date : 2017/6/11 * @Date : 2017/6/11
*/ */
public interface DIspatchOutModel { public interface DispatchModel {
void getCarInfo(DispatchCallback callback); void getCarInfo(String shellId,DispatchCallback callback);
void submit(DispatchCallback callback);
} }
package com.senthink.ebike_administrer_tool.model;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback;
import java.util.List;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/12
*/
public interface DispatchOutModel extends DispatchModel{
void submit(List<Integer> mList, String token, DispatchCallback callback);
}
package com.senthink.ebike_administrer_tool.model.callback.dispatch; package com.senthink.ebike_administrer_tool.model.callback.dispatch;
import com.senthink.ebike_administrer_tool.bean.userInfo.GetUserInfoById; import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import java.util.List;
/** /**
* @Description : 调度的回调 * @Description : 调度的回调
...@@ -11,11 +13,11 @@ import com.senthink.ebike_administrer_tool.bean.userInfo.GetUserInfoById; ...@@ -11,11 +13,11 @@ import com.senthink.ebike_administrer_tool.bean.userInfo.GetUserInfoById;
public interface DispatchCallback { public interface DispatchCallback {
/** 获取信息成功 */ /** 获取信息成功 */
void getInfoSuccess(); void getInfoSuccess(DispatchCarInfo out);
/** 获取信息失败 */ /** 获取信息失败 */
void getInfoFailed(String msg); void getInfoFailed(String msg);
/** 修改密码成功 */ /** 修改密码成功 */
void submitSuccess(); void submitSuccess();
/** 修改密码失败 */ /** 修改密码失败 */
void submitFailed(String msg); void submitFailed(List<Integer> list);
} }
package com.senthink.ebike_administrer_tool.model.callback.dispatch;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/12
*/
public interface DispatchInSearchCallback extends DispatchCallback {
void searchSuccess();
void searchFailed(String msg);
}
package com.senthink.ebike_administrer_tool.model.impl;
import com.senthink.ebike_administrer_tool.model.DIspatchOutModel;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/11
*/
public class DispatchOutModelImpl extends BasePresenterImpl implements DIspatchOutModel {
@Override
public void getCarInfo(DispatchCallback callback) {
callback.getInfoSuccess();
}
@Override
public void submit(DispatchCallback callback) {
}
}
...@@ -67,16 +67,4 @@ public class LoginModelImpl implements LoginModel { ...@@ -67,16 +67,4 @@ public class LoginModelImpl implements LoginModel {
}); });
} }
// /**
// * @Description: 保存信息
// * @param loginUser
// * */
// private void saveInfo(LoginUser loginUser) {
// SharedPreferences preference = MyApplication.getApplication()
// .getSharedPreferences("loginUser", Context.MODE_PRIVATE);
// SharedPreferences.Editor editor=preference.edit();
// editor.putString("username",loginUser.getUserName());
// editor.putString("password",loginUser.getPassWord());
// editor.commit();
// }
} }
...@@ -101,7 +101,7 @@ public class UserInfoModelImpl extends BasePresenterImpl implements UserInfoMode ...@@ -101,7 +101,7 @@ public class UserInfoModelImpl extends BasePresenterImpl implements UserInfoMode
* @Description 根据用户id来获取用户信息,主要包括电话,真实姓名 * @Description 根据用户id来获取用户信息,主要包括电话,真实姓名
*/ */
@Override @Override
public void getUserInfoById(int id, final UserInfoCallback callback) { public void getUserInfoById(final int id, final UserInfoCallback callback) {
StringBuilder url = new StringBuilder().append(CommonUrl.GET_USER_INFO_URL); StringBuilder url = new StringBuilder().append(CommonUrl.GET_USER_INFO_URL);
url.append(id); url.append(id);
AsyncHttp http = new AsyncHttp(MyApplication.getContext()); AsyncHttp http = new AsyncHttp(MyApplication.getContext());
...@@ -120,6 +120,7 @@ public class UserInfoModelImpl extends BasePresenterImpl implements UserInfoMode ...@@ -120,6 +120,7 @@ public class UserInfoModelImpl extends BasePresenterImpl implements UserInfoMode
GetUserInfoById user = new GetUserInfoById(); GetUserInfoById user = new GetUserInfoById();
user.setRealName(name); user.setRealName(name);
user.setTelephone(tel); user.setTelephone(tel);
user.setId(id);
callback.getInfoSuccess(user); callback.getInfoSuccess(user);
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
......
package com.senthink.ebike_administrer_tool.model.impl.dispatchImpl;
import android.util.Log;
import com.senthink.ebike_administrer_tool.MyApplication;
import com.senthink.ebike_administrer_tool.asynchttp.AsyncHttp;
import com.senthink.ebike_administrer_tool.asynchttp.HttpCallback;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import com.senthink.ebike_administrer_tool.common.CommonUrl;
import com.senthink.ebike_administrer_tool.model.DispatchInModel;
import com.senthink.ebike_administrer_tool.model.DispatchModel;
import com.senthink.ebike_administrer_tool.model.DispatchOutModel;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchInSearchCallback;
import com.senthink.ebike_administrer_tool.model.impl.BasePresenterImpl;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/12
*/
public class DispatchInModelImpl extends BasePresenterImpl implements DispatchInModel {
private static final String TAG = DispatchInModelImpl.class.getSimpleName();
@Override
public void getCarInfo(String shellId, final DispatchCallback callback) {
AsyncHttp http = new AsyncHttp(MyApplication.getApplication());
StringBuilder builder = new StringBuilder(CommonUrl.GET_CAR_PARK_INFO)
.append(shellId);
String url = builder.toString();
http.GetHttpClient(url, new HttpCallback() {
@Override
public void HttpCallbackResult(int code, JSONObject response) {
try {
String reponseCode = response.getString("code");
if (reponseCode.equals("8001")) {
DispatchCarInfo out = new DispatchCarInfo();
JSONObject obj = response.getJSONObject("data");
int id = obj.getInt("id");
String vehicleNo = obj.getString("vehicleNo");
// String parkingCode = obj.getString("parkingCode");
out.setId(id);
// out.setParkingCode(parkingCode);
out.setVehicleNo(vehicleNo);
callback.getInfoSuccess(out);
}else {
String msg = response.getString("msg");
callback.getInfoFailed(msg);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void HttpCallbackResult(int code, String response) {
}
});
}
@Override
public void search(String search, int userId, DispatchInSearchCallback callback) {
// TODO: 2017/6/12 等后台接口
}
@Override
public void submit(List<Integer> mList, int parkId, String token, final DispatchCallback callback) {
AsyncHttp http = new AsyncHttp(MyApplication.getContext());
JSONArray array = new JSONArray();
JSONObject obj = null;
try{
for (int i = 0;i<mList.size();i++) {
obj = new JSONObject();
obj.put("id",mList.get(i));
obj.put("inParkingId",115);
array.put(obj);
}
} catch (JSONException e) {
e.printStackTrace();
}
http.PostHttpClient(CommonUrl.DISPATCH_IN_SUBMIT, token, array.toString(), new HttpCallback() {
@Override
public void HttpCallbackResult(int code, JSONObject response) {
Log.i(TAG, "HttpCallbackResult: " + code);
try {
String responseCode = response.getString("code");
if (responseCode.equals("8001")) {
Log.i(TAG, "HttpCallbackResult: " + responseCode);
callback.submitSuccess();
}else if (responseCode.equals("4001")) {
// 存在失败的车辆
JSONArray array = response.getJSONArray("data");
List<Integer> tmpList = new ArrayList<Integer>();
JSONObject obj1 = null;
for (int i = 0;i < array.length();i++) {
obj1 = array.getJSONObject(i);
int id = obj1.getInt("id");
tmpList.add(id);
}
callback.submitFailed(tmpList);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void HttpCallbackResult(int code, String response) {
}
});
}
}
package com.senthink.ebike_administrer_tool.model.impl.dispatchImpl;
import android.util.Log;
import com.senthink.ebike_administrer_tool.MyApplication;
import com.senthink.ebike_administrer_tool.asynchttp.AsyncHttp;
import com.senthink.ebike_administrer_tool.asynchttp.HttpCallback;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import com.senthink.ebike_administrer_tool.common.CommonUrl;
import com.senthink.ebike_administrer_tool.model.DispatchModel;
import com.senthink.ebike_administrer_tool.model.DispatchOutModel;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback;
import com.senthink.ebike_administrer_tool.model.impl.BasePresenterImpl;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/11
*/
public class DispatchOutModelImpl extends BasePresenterImpl implements DispatchOutModel {
private static final String TAG = DispatchOutModelImpl.class.getSimpleName();
@Override
public void getCarInfo(String shellId, final DispatchCallback callback) {
AsyncHttp http = new AsyncHttp(MyApplication.getApplication());
StringBuilder builder = new StringBuilder(CommonUrl.GET_CAR_PARK_INFO)
.append(shellId);
String url = builder.toString();
http.GetHttpClient(url, new HttpCallback() {
@Override
public void HttpCallbackResult(int code, JSONObject response) {
try {
String reponseCode = response.getString("code");
if (reponseCode.equals("8001")) {
DispatchCarInfo out = new DispatchCarInfo();
JSONObject obj = response.getJSONObject("data");
int id = obj.getInt("id");
String vehicleNo = obj.getString("vehicleNo");
String parkingCode = obj.getString("parkingCode");
out.setId(id);
out.setParkingCode(parkingCode);
out.setVehicleNo(vehicleNo);
callback.getInfoSuccess(out);
}else {
String msg = response.getString("msg");
callback.getInfoFailed(msg);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void HttpCallbackResult(int code, String response) {
}
});
}
@Override
public void submit(List<Integer> mList, String token, final DispatchCallback callback) {
AsyncHttp http = new AsyncHttp(MyApplication.getContext());
JSONArray array = new JSONArray();
JSONObject obj = null;
try{
for (int i = 0;i<mList.size();i++) {
obj = new JSONObject();
obj.put("id",mList.get(i));
array.put(obj);
}
} catch (JSONException e) {
e.printStackTrace();
}
http.PostHttpClient(CommonUrl.DISPATCH_OUT_SUBMIT, token, array.toString(), new HttpCallback() {
@Override
public void HttpCallbackResult(int code, JSONObject response) {
Log.i(TAG, "HttpCallbackResult: " + code);
try {
String responseCode = response.getString("code");
if (responseCode.equals("8001")) {
Log.i(TAG, "HttpCallbackResult: " + responseCode);
callback.submitSuccess();
}else if (responseCode.equals("4001")) {
// 存在车辆失败
JSONArray array = response.getJSONArray("data");
List<Integer> tmpList = new ArrayList<Integer>();
JSONObject obj1 = null;
for (int i = 0;i < array.length();i++) {
obj1 = array.getJSONObject(i);
int id = obj1.getInt("id");
tmpList.add(id);
}
callback.submitFailed(tmpList);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void HttpCallbackResult(int code, String response) {
}
});
}
}
package com.senthink.ebike_administrer_tool.presenter; package com.senthink.ebike_administrer_tool.presenter;
import java.util.List;
/** /**
* @Description : * @Description :
* @Author : ni * @Author : ni
...@@ -7,9 +9,8 @@ package com.senthink.ebike_administrer_tool.presenter; ...@@ -7,9 +9,8 @@ package com.senthink.ebike_administrer_tool.presenter;
* @Date : 2017/6/11 * @Date : 2017/6/11
*/ */
public interface DIspatchOutPresenter { public interface DIspatchPresenter {
// 获取车辆信息 // 获取车辆信息
void getCarInfo(); void getCarInfo(String shellId);
// 提交信息
void submit();
} }
package com.senthink.ebike_administrer_tool.presenter;
import com.senthink.ebike_administrer_tool.model.DispatchModel;
import java.util.List;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/12
*/
public interface DispatchInPresenter extends DIspatchPresenter {
void search(String search, int userId);
void submit(List<Integer> mList,int parkId, String token);
}
package com.senthink.ebike_administrer_tool.presenter;
import java.util.List;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/13
*/
public interface DispatchOutPresenter extends DIspatchPresenter{
// 提交信息
void submit(List<Integer> mList, String token);
}
package com.senthink.ebike_administrer_tool.presenter.impl;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback;
import com.senthink.ebike_administrer_tool.model.impl.dispatchImpl.DispatchInModelImpl;
import com.senthink.ebike_administrer_tool.presenter.DispatchInPresenter;
import com.senthink.ebike_administrer_tool.view.IDispatchFragment;
import java.util.List;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/12
*/
public class DispatchInPresenterImpl implements DispatchInPresenter {
private DispatchInModelImpl model;
private IDispatchFragment fragment;
public DispatchInPresenterImpl(IDispatchFragment fragmet) {
this.fragment = fragmet;
model = new DispatchInModelImpl();
}
@Override
public void getCarInfo(String shellId) {
model.getCarInfo(shellId, new DispatchCallback() {
@Override
public void getInfoSuccess(DispatchCarInfo out) {
fragment.updateInfo(out);
}
@Override
public void getInfoFailed(String msg) {
fragment.getInformationFailed(msg);
}
@Override
public void submitSuccess() {
}
@Override
public void submitFailed(List<Integer> list) {
fragment.submitFailed(list);
}
});
}
@Override
public void submit(List<Integer> mList, int parkId,String token) {
model.submit(mList, parkId,token, new DispatchCallback() {
@Override
public void getInfoSuccess(DispatchCarInfo out) {
}
@Override
public void getInfoFailed(String msg) {
}
@Override
public void submitSuccess() {
fragment.submitSuccess();
}
@Override
public void submitFailed(List<Integer> list) {
fragment.submitFailed(list);
}
});
}
@Override
public void search(String search, int userId) {
}
}
package com.senthink.ebike_administrer_tool.presenter.impl; package com.senthink.ebike_administrer_tool.presenter.impl;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback; import com.senthink.ebike_administrer_tool.model.callback.dispatch.DispatchCallback;
import com.senthink.ebike_administrer_tool.model.impl.DispatchOutModelImpl; import com.senthink.ebike_administrer_tool.model.impl.dispatchImpl.DispatchOutModelImpl;
import com.senthink.ebike_administrer_tool.presenter.DIspatchOutPresenter; import com.senthink.ebike_administrer_tool.presenter.DIspatchPresenter;
import com.senthink.ebike_administrer_tool.presenter.DispatchOutPresenter;
import com.senthink.ebike_administrer_tool.view.IDispatchFragment; import com.senthink.ebike_administrer_tool.view.IDispatchFragment;
import java.util.List;
/** /**
* @Description : * @Description :
* @Author : ni * @Author : ni
...@@ -12,21 +16,21 @@ import com.senthink.ebike_administrer_tool.view.IDispatchFragment; ...@@ -12,21 +16,21 @@ import com.senthink.ebike_administrer_tool.view.IDispatchFragment;
* @Date : 2017/6/11 * @Date : 2017/6/11
*/ */
public class DIspatchOutPresenterImpl implements DIspatchOutPresenter { public class DispatchOutPresenterImpl implements DispatchOutPresenter {
private DispatchOutModelImpl userInfoModel; private DispatchOutModelImpl model;
private IDispatchFragment fragment; private IDispatchFragment fragment;
public DIspatchOutPresenterImpl(IDispatchFragment fragmet) { public DispatchOutPresenterImpl(IDispatchFragment fragmet) {
this.fragment = fragmet; this.fragment = fragmet;
userInfoModel = new DispatchOutModelImpl(); model = new DispatchOutModelImpl();
} }
@Override @Override
public void getCarInfo() { public void getCarInfo(String shellId) {
userInfoModel.getCarInfo(new DispatchCallback() { model.getCarInfo(shellId,new DispatchCallback() {
@Override @Override
public void getInfoSuccess() { public void getInfoSuccess(DispatchCarInfo out) {
fragment.updateInfo(); fragment.updateInfo(out);
} }
@Override @Override
...@@ -36,21 +40,20 @@ public class DIspatchOutPresenterImpl implements DIspatchOutPresenter { ...@@ -36,21 +40,20 @@ public class DIspatchOutPresenterImpl implements DIspatchOutPresenter {
@Override @Override
public void submitSuccess() { public void submitSuccess() {
fragment.submitSuccess();
} }
@Override @Override
public void submitFailed(String msg) { public void submitFailed(List<Integer> list) {
fragment.postInformationFailed(msg);
} }
}); });
} }
@Override @Override
public void submit() { public void submit(List<Integer> mList,String token) {
userInfoModel.submit(new DispatchCallback() { model.submit(mList,token,new DispatchCallback() {
@Override @Override
public void getInfoSuccess() { public void getInfoSuccess(DispatchCarInfo out) {
} }
...@@ -61,12 +64,12 @@ public class DIspatchOutPresenterImpl implements DIspatchOutPresenter { ...@@ -61,12 +64,12 @@ public class DIspatchOutPresenterImpl implements DIspatchOutPresenter {
@Override @Override
public void submitSuccess() { public void submitSuccess() {
fragment.submitSuccess();
} }
@Override @Override
public void submitFailed(String msg) { public void submitFailed(List<Integer> list) {
fragment.submitFailed(list);
} }
}); });
} }
......
...@@ -58,7 +58,7 @@ public class MyInforPresenterImpl implements MyInforPresenter { ...@@ -58,7 +58,7 @@ public class MyInforPresenterImpl implements MyInforPresenter {
userInfoModel.modifyPassword(pswBean, new UserInfoCallback() { userInfoModel.modifyPassword(pswBean, new UserInfoCallback() {
@Override @Override
public void getInfoSuccess(GetUserInfoById user) { public void getInfoSuccess(GetUserInfoById user) {
fragment.updateInfor(user);
} }
@Override @Override
......
package com.senthink.ebike_administrer_tool.view; package com.senthink.ebike_administrer_tool.view;
import com.senthink.ebike_administrer_tool.bean.dispatch.DispatchCarInfo;
import java.util.List;
/** /**
* @Description : 调度界面的接口 * @Description : 调度界面的接口
* @Author : ni * @Author : ni
...@@ -9,7 +13,9 @@ package com.senthink.ebike_administrer_tool.view; ...@@ -9,7 +13,9 @@ package com.senthink.ebike_administrer_tool.view;
public interface IDispatchFragment extends IBaseFragment { public interface IDispatchFragment extends IBaseFragment {
// 更新信息 // 更新信息
void updateInfo(); void updateInfo(DispatchCarInfo out);
// 提交成功 // 提交成功
void submitSuccess(); void submitSuccess();
void submitFailed(List<Integer> list);
} }
package com.senthink.ebike_administrer_tool.widget;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.CycleInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.EditText;
import com.senthink.ebike_administrer_tool.R;
/**
* @Description :
* @Author : ni
* @Email : lifengni2015@gmail.com
* @Date : 2017/6/13
*/
public class ClearEditText extends EditText implements View.OnFocusChangeListener,TextWatcher {
/**
* 删除按钮的引用
*/
private Drawable mClearDrawable;
private Context context;
/**
* 控件是否有焦点
*/
private boolean hasFocus;
public ClearEditText(Context context) {
this(context,null);
// super(context);
// this.context = context;
// init();
}
public ClearEditText(Context context, AttributeSet attrs){
//这里构造方法也很重要,不加这个很多属性不能再XML里面定义
this(context, attrs, android.R.attr.editTextStyle);
}
public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
//获取EditText的DrawableRight,假如没有设置我们就使用默认的图片
mClearDrawable = getCompoundDrawables()[2];
if (mClearDrawable == null) {
mClearDrawable = getResources().getDrawable(R.drawable.icon_x_hui);
}
mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());
//默认设置隐藏图标
setClearIconVisible(false);
//设置焦点改变的监听
setOnFocusChangeListener(this);
//设置输入框里面内容发生改变的监听
addTextChangedListener(this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mClearDrawable != null && event.getAction() == MotionEvent.ACTION_UP) {
int x = (int) event.getX();
//判断触摸点是否在水平范围内
boolean isInnerWidth = (x > (getWidth() - getTotalPaddingRight())) &&
(x < (getWidth() - getPaddingRight()));
//获取删除图标的边界,返回一个Rect对象
Rect rect = mClearDrawable.getBounds();
//获取删除图标的高度
int height = rect.height();
int y = (int) event.getY();
//计算图标底部到控件底部的距离
int distance = (getHeight() - height) / 2;
//判断触摸点是否在竖直范围内(可能会有点误差)
//触摸点的纵坐标在distance到(distance+图标自身的高度)之内,则视为点中删除图标
boolean isInnerHeight = (y > distance) && (y < (distance + height));
if (isInnerHeight && isInnerWidth) {
this.setText("");
}
}
return super.onTouchEvent(event);
}
/**
* 设置清除图标的显示与隐藏,调用setCompoundDrawables为EditText绘制上去
*
* @param visible
*/
private void setClearIconVisible(boolean visible) {
Drawable right = visible ? mClearDrawable : null;
setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1],
right, getCompoundDrawables()[3]);
}
/**
* 当ClearEditText焦点发生变化的时候,判断里面字符串长度设置清除图标的显示与隐藏
*/
@Override
public void onFocusChange(View v, boolean hasFocus) {
this.hasFocus = hasFocus;
if (hasFocus) {
setClearIconVisible(getText().length() > 0);
} else {
setClearIconVisible(false);
}
}
/**
* 当输入框里面内容发生变化的时候回调的方法
*/
@Override
public void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
if (hasFocus) {
setClearIconVisible(text.length() > 0);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
/**
* 设置晃动动画
*/
public void setShakeAnimation() {
this.setAnimation(shakeAnimation(5));
}
/**
* 晃动动画
*
* @param counts 1秒钟晃动多少下
* @return
*/
public static Animation shakeAnimation(int counts) {
Animation translateAnimation = new TranslateAnimation(0, 10, 0, 0);
translateAnimation.setInterpolator(new CycleInterpolator(counts));
translateAnimation.setDuration(1000);
return translateAnimation;
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:bottomLeftRadius="@dimen/switch_button_corners_radius"
android:bottomRightRadius="@dimen/switch_button_corners_radius"
android:topLeftRadius="@dimen/switch_button_corners_radius"
android:topRightRadius="@dimen/switch_button_corners_radius"/>
<solid android:color="@color/tab_tv_normal"/>
</shape>
\ No newline at end of file
...@@ -4,6 +4,43 @@ ...@@ -4,6 +4,43 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/background_color_white"> android:background="@color/background_color_white">
<android.support.v7.widget.Toolbar
android:id="@+id/dispatch_toolbar"
android:elevation="3dp"
android:background="@color/tab_tv_normal"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:paddingLeft="20dp"
android:paddingRight="20dp"
>
<!--<ImageView-->
<!--android:id="@+id/iv_dispatch_back"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="left"-->
<!--android:src="@drawable/icon_fh"-->
<!--/>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:textColor="@color/login_text_color"
android:textSize="@dimen/title_text_size"
android:text="@string/app_name"/>
<TextView
android:id="@+id/tv_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="right"
android:text="@string/submit"
android:textColor="@color/login_text_color"
android:textSize="@dimen/toolbar_submit_size" />
</android.support.v7.widget.Toolbar>
<LinearLayout <LinearLayout
android:paddingTop="15dp" android:paddingTop="15dp"
android:paddingLeft="20dp" android:paddingLeft="20dp"
......
...@@ -4,15 +4,24 @@ ...@@ -4,15 +4,24 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:paddingLeft="20dp" android:paddingLeft="20dp"
android:paddingRight="20dp" android:paddingRight="20dp"
android:focusable="true"
android:focusableInTouchMode="true"
> >
<com.senthink.ebike_administrer_tool.widget.ClearEditText
<EditText
android:id="@+id/et_input_parkname" android:id="@+id/et_input_parkname"
android:hint="@string/input_park_name" android:hint="@string/input_park_name"
android:textSize="@dimen/small_text" android:textSize="@dimen/small_text"
android:background="@drawable/search_park_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="37dp" android:layout_height="37dp"/>
android:background="@drawable/search_park_name" /> <!--<EditText-->
<!--android:id="@+id/et_input_parkname"-->
<!--android:hint="@string/input_park_name"-->
<!--android:textSize="@dimen/small_text"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="37dp"-->
<!--android:background="@drawable/search_park_name" />-->
<RelativeLayout <RelativeLayout
android:id="@+id/rl_text" android:id="@+id/rl_text"
android:paddingTop="10dp" android:paddingTop="10dp"
......
...@@ -2,6 +2,43 @@ ...@@ -2,6 +2,43 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent" android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
android:elevation="3dp"
android:background="@color/tab_tv_normal"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:paddingLeft="20dp"
android:paddingRight="20dp"
>
<!--<ImageView-->
<!--android:id="@+id/iv_dispatch_back"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="left"-->
<!--android:src="@drawable/icon_fh"-->
<!--/>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:textColor="@color/login_text_color"
android:textSize="@dimen/title_text_size"
android:text="@string/app_name"/>
<!--<TextView-->
<!--android:id="@+id/tv_extra_text"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_centerInParent="true"-->
<!--android:layout_gravity="right"-->
<!--android:text="@string/logout"-->
<!--android:textColor="@color/login_text_color"-->
<!--android:textSize="@dimen/toolbar_submit_size" />-->
</android.support.v7.widget.Toolbar>
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
......
...@@ -5,6 +5,43 @@ ...@@ -5,6 +5,43 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:background="@color/background_color_grey" android:background="@color/background_color_grey"
android:layout_height="match_parent"> android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/me_toolbar"
android:elevation="3dp"
android:background="@color/tab_tv_normal"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:paddingLeft="20dp"
android:paddingRight="20dp"
>
<!--<ImageView-->
<!--android:id="@+id/iv_dispatch_back"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="left"-->
<!--android:src="@drawable/icon_fh"-->
<!--/>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:textColor="@color/login_text_color"
android:textSize="@dimen/title_text_size"
android:text="@string/app_name"/>
<!--<TextView-->
<!--android:id="@+id/tv_logout"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_centerInParent="true"-->
<!--android:layout_gravity="right"-->
<!--android:text="@string/logout"-->
<!--android:textColor="@color/login_text_color"-->
<!--android:textSize="@dimen/toolbar_submit_size" />-->
</android.support.v7.widget.Toolbar>
<ImageView <ImageView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="150dp" android:layout_height="150dp"
......
...@@ -2,6 +2,43 @@ ...@@ -2,6 +2,43 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent" android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
android:elevation="3dp"
android:background="@color/tab_tv_normal"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:paddingLeft="20dp"
android:paddingRight="20dp"
>
<!--<ImageView-->
<!--android:id="@+id/iv_dispatch_back"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="left"-->
<!--android:src="@drawable/icon_fh"-->
<!--/>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:textColor="@color/login_text_color"
android:textSize="@dimen/title_text_size"
android:text="@string/app_name"/>
<TextView
android:id="@+id/tv_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="right"
android:text="@string/list"
android:textColor="@color/login_text_color"
android:textSize="@dimen/toolbar_submit_size" />
</android.support.v7.widget.Toolbar>
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
......
...@@ -2,6 +2,43 @@ ...@@ -2,6 +2,43 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent" android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
android:elevation="3dp"
android:background="@color/tab_tv_normal"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:paddingLeft="20dp"
android:paddingRight="20dp"
>
<!--<ImageView-->
<!--android:id="@+id/iv_dispatch_back"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="left"-->
<!--android:src="@drawable/icon_fh"-->
<!--/>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:textColor="@color/login_text_color"
android:textSize="@dimen/title_text_size"
android:text="@string/app_name"/>
<!--<TextView-->
<!--android:id="@+id/tv_extra_text"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_centerInParent="true"-->
<!--android:layout_gravity="right"-->
<!--android:text="@string/logout"-->
<!--android:textColor="@color/login_text_color"-->
<!--android:textSize="@dimen/toolbar_submit_size" />-->
</android.support.v7.widget.Toolbar>
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_search_parkname"
android:layout_marginRight="10dp"
android:text="上官婉儿"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center|top"
android:background="@drawable/success_dialog">
<ImageView
android:layout_marginTop="40dp"
android:id="@+id/iv_cg"
android:src="@drawable/icon_cg"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_centerInParent="true"
android:layout_marginTop="15dp"
android:layout_below="@+id/iv_cg"
android:textColor="@color/white"
android:textSize="@dimen/toolbar_submit_size"
android:text="@string/dispatch_out_success"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
\ No newline at end of file
...@@ -6,42 +6,6 @@ ...@@ -6,42 +6,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
android:elevation="3dp"
android:background="@color/tab_tv_normal"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:paddingLeft="20dp"
android:paddingRight="20dp"
>
<!--<ImageView-->
<!--android:id="@+id/iv_dispatch_back"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="left"-->
<!--android:src="@drawable/icon_fh"-->
<!--/>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:textColor="@color/login_text_color"
android:textSize="@dimen/title_text_size"
android:text="@string/app_name"/>
<TextView
android:id="@+id/tv_extra_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="right"
android:textColor="@color/login_text_color"
android:textSize="@dimen/toolbar_submit_size" />
</android.support.v7.widget.Toolbar>
<android.support.v4.view.ViewPager <android.support.v4.view.ViewPager
android:id="@+id/viewpager" android:id="@+id/viewpager"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/dispatch_toolbar"
android:elevation="3dp"
android:background="@color/tab_tv_normal"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:paddingLeft="20dp"
android:paddingRight="20dp">
<!--<ImageView-->
<!--android:id="@+id/iv_dispatch_back"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="left"-->
<!--android:src="@drawable/icon_fh"-->
<!--/>-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:textColor="@color/login_text_color"
android:textSize="@dimen/title_text_size"
android:text="@string/app_name"/>
</android.support.v7.widget.Toolbar>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="37dp"
>
<com.senthink.ebike_administrer_tool.widget.ClearEditText
android:id="@+id/et_input_parkname"
android:hint="@string/input_park_name"
android:textSize="@dimen/small_text"
android:background="@drawable/search_park_name"
android:layout_width="300dp"
android:layout_height="match_parent" />
<TextView
android:id="@+id/tv_cancel"
android:layout_alignParentRight="true"
android:layout_centerInParent="true"
android:textColor="@color/tab_tv_normal"
android:textSize="@dimen/toolbar_submit_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cancel"/>
</RelativeLayout>
<ListView
android:id="@+id/user_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
</LinearLayout>
\ No newline at end of file
...@@ -110,4 +110,7 @@ ...@@ -110,4 +110,7 @@
<string name="button_web_search">网页搜索</string> <string name="button_web_search">网页搜索</string>
<string name="button_share_by_email">通过 E-mail 分享</string> <string name="button_share_by_email">通过 E-mail 分享</string>
<string name="button_share_by_sms">通过短信分享</string> <string name="button_share_by_sms">通过短信分享</string>
<string name="no_car">尚未添加车辆</string>
<string name="dispatch_out_success">成功调出</string>
<string name="dispatch_in_success">成功调入</string>
</resources> </resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment