Android實(shí)現(xiàn)可復(fù)用的選擇頁面
本文實(shí)例為大家分享了Android實(shí)現(xiàn)可復(fù)用的選擇頁面的具體代碼,供大家參考,具體內(nèi)容如下
窗口代碼
/**
* 根據(jù)上一個(gè)頁面?zhèn)鬟^來的isMultipleEnable判斷是否可以多選
* 1.單選頁面選中一個(gè)條目直接結(jié)束并回傳
* 2.多選頁面選中之后需要提交
* 3.提交數(shù)據(jù)之后需要刷新列表
*/
public class UserSelectActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "UserSelectActivity";
@BindView(R.id.tv_title_middle)
TextView title;
@BindView(R.id.title_left)
ImageView back;
@BindView(R.id.normal_user_listview)
ListView mListView;
@BindView(R.id.edit_tv)
TextView edit;
@BindView(R.id.filter_tv)
TextView filter;
private Context mContext;
private boolean isMultipleEnable;
private UserSelectAdapter mAdapter;
private List<ClsNormalUser> mClsNormalUserList;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_normal_user_list);
//初始化ButterKnife
ButterKnife.bind(this);
initView();
initData();
initListener();
}
private void initData() {
mContext = this;
//通過源頁面?zhèn)鬟^來的值來生成對應(yīng)的視圖,默認(rèn)是單選
isMultipleEnable = getIntent().getBooleanExtra("isMultipleEnable", false);
//初始化數(shù)據(jù)源
mClsNormalUserList = new ArrayList<>();
mAdapter = new UserSelectAdapter(mClsNormalUserList, mContext);
mListView.setAdapter(mAdapter);
getOfflineData(20);
//多選頁面要顯示提交按鈕和checkbox
if (isMultipleEnable) {
edit.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_send_black_24dp, 0, 0, 0);
edit.setVisibility(View.VISIBLE);
for (ClsNormalUser user : mClsNormalUserList) {
user.setIsCheckBoxVisible(true);
}
}
}
//生成模擬數(shù)據(jù)
private void getOfflineData(int num) {
List<ClsNormalUser> clsNormalUserList = new ArrayList<>();
for (int i = 0; i < num; i++) {
ClsNormalUser clsNormalUser = new ClsNormalUser();
clsNormalUser.setUserID("userID " + i);
clsNormalUser.setWorkNumber("workNumber " + i);
clsNormalUser.setUserType("userType " + i);
clsNormalUser.setOrgName("orgName " + i);
clsNormalUser.setCName("cName " + i);
clsNormalUser.setSysUserName("sysUserName " + i);
clsNormalUser.setOrgID("orgID " + i);
clsNormalUser.setWorkPos("workPos " + i);
clsNormalUserList.add(clsNormalUser);
}
//數(shù)據(jù)填充后要同時(shí)適配器刷新視圖
mClsNormalUserList.addAll(clsNormalUserList);
mAdapter.notifyDataSetChanged();
}
private void initView() {
title.setText("選擇用戶");
}
private void initListener() {
edit.setOnClickListener(this);
mListView.setOnItemClickListener((parent, view, position, id) -> {
ClsNormalUser clsNormalUser = mClsNormalUserList.get(position);
if (isMultipleEnable) {
//多選狀態(tài)下點(diǎn)擊選中當(dāng)前條目
if (clsNormalUser.getIsCheckBoxVisible()) {
clsNormalUser.setIsChecked(!clsNormalUser.getIsChecked());
mAdapter.notifyDataSetChanged();
}
} else {
//單選狀態(tài)下點(diǎn)擊結(jié)束當(dāng)前頁并回傳值
Intent intent = new Intent();
//實(shí)體類要實(shí)現(xiàn)序列化接口Parcelable
intent.putExtra("user", clsNormalUser);
setResult(RESULT_OK, intent);
finish();
}
});
}
@Override
public void onClick(View v) {
//點(diǎn)擊提交按鈕將選中的值回傳并結(jié)束當(dāng)前頁
if (v.getId() == R.id.edit_tv) {
ArrayList<ClsNormalUser> normalUserList = new ArrayList<>();
for (ClsNormalUser normalUser : mClsNormalUserList) {
if (normalUser.getIsChecked()) {
normalUserList.add(normalUser);
}
}
Intent intent = new Intent();
//實(shí)體類要實(shí)現(xiàn)序列化接口Parcelable
intent.putParcelableArrayListExtra("users", normalUserList);
setResult(RESULT_OK, intent);
finish();
}
}
}
適配器代碼
public class UserSelectAdapter extends BaseAdapter {
private List<ClsNormalUser> mList;
private LayoutInflater mInflater;
public UserSelectAdapter(List<ClsNormalUser> list, Context mContext) {
mList = list;
mInflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public ClsNormalUser getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup root) {
ItemHolder holder;
ClsNormalUser clsNormalUser = mList.get(position);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_alluser_sys, null);
holder = new ItemHolder();
holder.id = convertView.findViewById(R.id.user_id);
holder.name = convertView.findViewById(R.id.user_name);
holder.org = convertView.findViewById(R.id.user_org);
holder.checkBox = convertView.findViewById(R.id.user_checkbox);
convertView.setTag(holder);
} else {
holder = (ItemHolder) convertView.getTag();
}
holder.id.setText(clsNormalUser.getUserID());
holder.name.setText(clsNormalUser.getCName());
holder.org.setText(clsNormalUser.getOrgName());
//是否顯示checkbox
if (clsNormalUser.getIsCheckBoxVisible()) {
holder.checkBox.setVisibility(View.VISIBLE);
} else {
holder.checkBox.setVisibility(View.GONE);
}
//條目是否選中
if (clsNormalUser.getIsChecked()) {
holder.checkBox.setImageResource(R.drawable.ic_check_box_black_24dp);
} else {
holder.checkBox.setImageResource(R.drawable.ic_check_box_outline_blank_black_24dp);
}
return convertView;
}
class ItemHolder {
TextView id;
TextView name;
TextView org;
ImageView checkBox;
}
}
效果如圖


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程實(shí)現(xiàn)計(jì)算兩個(gè)日期之間天數(shù)并打印所有日期的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)計(jì)算兩個(gè)日期之間天數(shù)并打印所有日期的方法,涉及Android日期時(shí)間相關(guān)轉(zhuǎn)換與運(yùn)算操作技巧,需要的朋友可以參考下2018-01-01
Android 開發(fā)實(shí)現(xiàn)EditText 光標(biāo)居右顯示
這篇文章主要介紹了Android 開發(fā)實(shí)現(xiàn)EditText 光標(biāo)居右顯示的相關(guān)資料,需要的朋友可以參考下2017-02-02
使用Composing?builds提升Android編譯速度
這篇文章主要介紹了使用Composing?builds提升Android編譯速度示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
android 實(shí)現(xiàn)類似微信緩存和即時(shí)更新好友頭像示例
本篇文章主要介紹了android 實(shí)現(xiàn)類似微信緩存和即時(shí)更新好友頭像示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01
Android 實(shí)現(xiàn)文件夾排序功能的實(shí)例代碼
這篇文章主要介紹了Android 實(shí)現(xiàn)文件夾排序功能的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-09-09
Android 使用Vitamio打造自己的萬能播放器(9)—— 在線播放 (在線電視)
本文主要介紹Android 使用Vitamio開發(fā)播放器,實(shí)現(xiàn)在線電視播放,這里提供效果圖和實(shí)例代碼以便大家參考,2016-07-07
深入理解與運(yùn)行Android Jetpack組件之ViewModel
ViewModel是Android Jetpack組件之一,是一種用于管理UI相關(guān)數(shù)據(jù)的架構(gòu)組件,它能夠幫助開發(fā)者實(shí)現(xiàn)優(yōu)雅的數(shù)據(jù)驅(qū)動(dòng)和生命周期管理,本文將深入淺出地介紹ViewModel的使用和原理,帶你一步步掌握這個(gè)強(qiáng)大的組件2023-08-08
Android開發(fā)之實(shí)現(xiàn)GridView支付寶九宮格
本文給大家介紹android開發(fā)之實(shí)現(xiàn)gridview支付寶九宮格,其原理是讓每個(gè)item都設(shè)置成帶有分割線的背景,在這不透漏太多內(nèi)容,感興趣的朋友請閱讀全文2015-11-11

