package com.example.huangfei.hack2;
import android.content.Context;
import android.graphics.Color;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.text.method.PasswordTransformationMethod;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import com.example.huangfei.hack2.model.Account;
import com.example.huangfei.hack2.model.Countries;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
/**
* Created by huangfeihong on 2015/11/19.
*/
public class CreateAccountAdapter extends BaseAdapter {
/**
* 该接口用来与CreateAccountActivity进行交互
*/
public static interface CreateAccountDelegate {
int FORWARD = 1;
int BACKWARD = -1;
void scroll(int type);//该方法当点击”Next“按钮时执行
void processForm(Account account);//当用户提交表单时,执行该方法
}
public static final String FULL_NAME_KEY = "fullname";
public static final String EMAIL_KEY = "email";
public static final String PASSWORD_KEY = "password";
public static final String GENDER_KEY = "gender";
public static final String CITY_KEY = "city";
public static final String COUNTRY_KEY = "country";
public static final String ZIP_KEY = "zipcode";
private static final int FORMS_QTY = 4;
private Context mContext;
private LayoutInflater mInflator;
private CreateAccountDelegate mDelegate;
private HashMap<String, String> mFormData;
private Account mAccount;
public CreateAccountAdapter(Context ctx) {
mContext = ctx;
mInflator = LayoutInflater.from(ctx);
mFormData = new HashMap<String, String>();
mAccount = new Account();
}
@Override
public int getCount() {
return FORMS_QTY;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
public void setDelegate(CreateAccountDelegate delegate) {
mDelegate = delegate;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
//填充自定义View
convertView = mInflator.inflate(
R.layout.create_account_generic_row, parent, false);
}
//获取放置表单项的LinearLayout
LinearLayout formLayout = (LinearLayout) convertView
.findViewById(R.id.create_account_form);
//最后一页不显示”Next“按钮
View nextButton = convertView
.findViewById(R.id.create_account_next);
if (position == FORMS_QTY - 1) {
nextButton.setVisibility(View.GONE);
} else {
nextButton.setVisibility(View.VISIBLE);
}
if (mDelegate != null) {
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDelegate.scroll(CreateAccountDelegate.FORWARD);
}
});
}
//仅在最后一页显示提交表单按钮
Button createButton = (Button) convertView
.findViewById(R.id.create_account_create);
if (position == FORMS_QTY - 1) {
createButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
processForm();
}
});
createButton.setVisibility(View.VISIBLE);
} else {
createButton.setVisibility(View.GONE);
}
//根据页面位置填充LinearLayout
switch (position) {
case 0:
populateFirstForm(formLayout);
break;
case 1:
populateSecondForm(formLayout);
break;
case 2:
populateThirdForm(formLayout);
break;
case 3:
populateFourthForm(formLayout);
break;
}
return convertView;
}
/**
* 创建第一个表单
*/
private void populateFirstForm(LinearLayout formLayout) {
formLayout.addView(createTitle(mContext
.getString(R.string.account_create_full_name_title)));
EditText nameEditText = createEditText(
mContext.getString(R.string.account_create_full_name_hint),
InputType.TYPE_CLASS_TEXT, EditorInfo.IME_ACTION_NEXT, false,
FULL_NAME_KEY);
if (mFormData.get(FULL_NAME_KEY) != null) {
nameEditText.setText(mFormData.get(FULL_NAME_KEY));
}
formLayout.addView(nameEditText);
formLayout.addView(createErrorView(FULL_NAME_KEY));
formLayout.addView(createTitle(mContext
.getString(R.string.account_create_email_title)));
EditText emailEditText = createEditText(
mContext.getString(R.string.account_create_email_hint),
InputType.TYPE_CLASS_TEXT, EditorInfo.IME_ACTION_NEXT, true,
EMAIL_KEY);
if (mFormData.get(EMAIL_KEY) != null) {
emailEditText.setText(mFormData.get(EMAIL_KEY));
}
formLayout.addView(emailEditText);
formLayout.addView(createErrorView(EMAIL_KEY));
}
/**
* 创建第二个表单
*/
private void populateSecondForm(LinearLayout formLayout) {
formLayout.addView(createTitle(mContext
.getString(R.string.account_create_password_title)));
EditText passwordEditText = createEditText(
mContext.getString(R.string.account_create_password_hint),
InputType.TYPE_CLASS_TEXT, EditorInfo.IME_ACTION_DONE, false,
PASSWORD_KEY);
//设置输入框文字展示形式
passwordEditText.setTransformationMethod(new PasswordTransformationMethod());
formLayout.addView(passwordEditText);
formLayout.addView(createErrorView(PASSWORD_KEY));
formLayout.addView(createTitle(mContext
.getString(R.string.account_create_gender_title)));
Spinner spinner = new Spinner(mContext);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.bottomMargin = 17;
spinner.setLayoutParams(params);
final ArrayAdapter<CharSequence> adapter = ArrayAdapter
.createFromResource(mContext, R.array.sexes_array,
android.R.layout.simple_spinner_item);
spinner.setAdapter(adapter);
spinner.setPrompt(mContext
.getString(R.string.account_create_sex_spinner_prompt));
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
mFormData.put(GENDER_KEY, adapter.getItem(pos).toString());
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
没有合适的资源?快使用搜索试试~ 我知道了~
使用Gallery创建向导表单
共30个文件
xml:13个
java:8个
png:5个
需积分: 3 6 下载量 86 浏览量
2015-11-20
00:04:33
上传
评论
收藏 54KB ZIP 举报
温馨提示
当需要用户填充一个较长的表单时,开发者或许会找不到头绪。在接下来的这个例子中,我们会使用Gallery控件创建一个具有多个表单项的用户注册表单。
资源推荐
资源详情
资源评论
收起资源包目录
hack2.zip (30个子文件)
hack2
.gitignore 8B
build.gradle 702B
proguard-rules.pro 662B
libs
src
test
java
com
example
huangfei
hack2
ExampleUnitTest.java 333B
main
AndroidManifest.xml 1KB
java
com
example
huangfei
hack2
view
CreateAccountGallery.java 1KB
model
Countries.java 6KB
Account.java 2KB
MainActivity.java 505B
CreateAccountAdapter.java 15KB
CreateAccountActivity.java 3KB
res
values
arrays.xml 183B
styles.xml 1KB
colors.xml 214B
strings.xml 1KB
dimens.xml 259B
mipmap-xxhdpi
ic_launcher.png 8KB
layout
activity_main.xml 479B
create_account_generic_row.xml 2KB
create_account.xml 644B
mipmap-xhdpi
ic_launcher.png 5KB
mipmap-hdpi
ic_launcher.png 3KB
drawable
mipmap-mdpi
ic_launcher.png 2KB
menu
menu_main.xml 401B
values-v21
styles.xml 335B
values-w820dp
arrays.xml 176B
dimens.xml 364B
mipmap-xxxhdpi
ic_launcher.png 10KB
androidTest
java
com
example
huangfei
hack2
ApplicationTest.java 369B
hack2.iml 8KB
共 30 条
- 1
资源评论
黄飞_hf
- 粉丝: 52
- 资源: 65
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功