自动生成列表view
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@ContentView(R.layout.ta_pathography)
public class TA_PathographyRecord extends TA_BaseActivity {
@ViewInject(R.id.mainlly)
private LinearLayout mainlly;
@ViewInject(R.id.emptyLayout)
protected EmptyLayout mErrorLayout;
@ViewInject(R.id.searchedittext)
protected EditText searchedittext;
PatientModel patientModel;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
initView();
initData();
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_worktask, menu);
menu.findItem(R.id.action_right).setTitle("保存").setIcon(R.mipmap.icon_check);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_right) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < addStringList.size(); i++) {
String s = addStringList.get(i).getTemplateContent();
if(!TextUtils.isEmpty(s)) {
sb.append(s);
if(i!=addStringList.size()-1) {
sb.append("\n");
}
}
}
EventBus.getDefault().post(new EBPathography(sb.toString()));
finish();
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
protected void initView() {
mRepleace_toolbar.setVisibility(View.VISIBLE);
mToolbar.setVisibility(View.VISIBLE);
patientModel = (PatientModel) getIntent().getSerializableExtra(BundleCommon.KEY_Patient);
if (patientModel != null) {
String sex = "";
if (patientModel.getSex() != null) {
DictionaryModel dm = DictionalDao.getDictionaryByTypeId(1, patientModel.getSex());
if (dm != null) {
sex = dm.getDisplayname();
}
}
String age = patientModel.getAge() != null ? patientModel.getAge()+ "岁" : "";
String sickebed = patientModel.getSickbedNo()!=null?patientModel.getSickbedNo() +"床 " :"";
String title =sickebed + patientModel.getName() + " " + age + " " + sex;
mRepleace_toolbar.setText(title);
}
mToolbar.setTitle("");
setToolbarBackClose(R.mipmap.icon_close);
mToolbar.inflateMenu(R.menu.menu_worktask);
searchedittext.addTextChangedListener(textWatcher);
}
protected void initData() {
mErrorLayout.setErrorType(EmptyLayout.NETWORK_LOADING);
mErrorLayout.setOnLayoutClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mErrorLayout.setErrorType(EmptyLayout.NETWORK_LOADING);
getData();
}
});
getData();
}
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
String input = s.toString();
if(input.equals("")){
mErrorLayout.setErrorType(EmptyLayout.HIDE_LAYOUT);
genaralListView(wraplist);
}else{
mErrorLayout.setErrorType(EmptyLayout.NETWORK_LOADING);
mHandle.sendEmptyMessageDelayed(1,500);
}
}
};
Handler mHandle = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
searchB();
}
};
public void searchB() {
String searchString = searchedittext.getText().toString();
if(searchString.equals("")) return;
if(wraplist==null) return;
List<PathographyTemplate> searchList = new ArrayList<>();
for(PathographyTemplate pt : wraplist) {
for(PathographyTemplateModel model : pt.getSameList()) {
if(model.getKeyword()!=null && model.getKeyword().contains(searchString)
|| model.getTemplateContent()!=null && model.getTemplateContent().contains(searchString)) {
searchList.add(pt);
}
}
}
if(searchList.size()>0) {
mErrorLayout.setErrorType(EmptyLayout.HIDE_LAYOUT);
genaralListView(searchList);
} else {
mErrorLayout.setErrorType(EmptyLayout.NODATA);
mErrorLayout.setNoDataContent("未找到匹配数据");
}
}
@Override
public void onResume() {
super.onResume();
}
List<PathographyTemplateModel> addStringList = new ArrayList<>();
List<PathographyTemplate> wraplist;
private void getData() {
responseCall = appContext.getAPIService().getAllPathographytemplate();
responseCall.enqueue(new Callback<List<PathographyTemplateModel>>() {
@Override
public void onResponse(Call<List<PathographyTemplateModel>> call, Response<List<PathographyTemplateModel>> response) {
int code = response.code();
if (code == 200) {
if (response.body() != null) {
List<PathographyTemplateModel> list = response.body();
wraplist = SortAllPathographyTemplate(list);
genaralListView(wraplist);
mErrorLayout.setErrorType(EmptyLayout.HIDE_LAYOUT);
} else {
mErrorLayout.setErrorType(EmptyLayout.NODATA);
}
} else {
mErrorLayout.setErrorType(EmptyLayout.NETWORK_ERROR);
}
}
@Override
public void onFailure(Call<List<PathographyTemplateModel>> call, Throwable t) {
if (isFinishing()) return;
UIHelper.snackBarMessage(mToolbar, "网络超时");
mErrorLayout.setErrorType(EmptyLayout.NETWORK_ERROR);
}
});
}
/**
* 生成数据列表
* @param wraplist
*/
private void genaralListView(List<PathographyTemplate> wraplist) {
if(wraplist==null) return;
mainlly.removeAllViews();
for (final PathographyTemplate template : wraplist) {
LinearLayout child = (LinearLayout) getLayoutInflater().inflate(R.layout.pathgraphy_item, null, false);
final TextView content = (TextView) child.findViewById(R.id.content);
final CheckBox checkBox = (CheckBox) child.findViewById(R.id.checkBox);
final LinearLayout mainlly_item = (LinearLayout) child.findViewById(R.id.mainlly_item);
content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkBox.setChecked(checkBox.isChecked() ? false : true);
if(checkBox.isChecked()) {
UIHelper.setSubChildCheckBoxTrue(mainlly_item);
} else {
UIHelper.setSubChildCheckBoxFalse(mainlly_item);
}
}
});
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
List<PathographyTemplateModel> templateSameList = template.getSameList();
if (templateSameList != null && templateSameList.size() > 0) {
for (PathographyTemplateModel model : templateSameList) {
if (!addStringList.contains(model)) {
addStringList.add(model);
}
}
}
UIHelper.setSubChildCheckBoxTrue(mainlly_item);
} else {
List<PathographyTemplateModel> templateSameList = template.getSameList();
if (templateSameList != null && templateSameList.size() > 0) {
templateSameList.iterator();
for (Iterator<PathographyTemplateModel> iterator = templateSameList.iterator(); iterator.hasNext();) {
PathographyTemplateModel m = iterator.next();
if (addStringList.contains(m)) {
addStringList.remove(m);
}
}
}
UIHelper.setSubChildCheckBoxFalse(mainlly_item);
}
}
});
if (TextUtils.isEmpty(template.getTemmplateName())) {
content.setText("未分类");
} else {
content.setText(template.getTemmplateName());
}
for (final PathographyTemplateModel model : template.getSameList()) {
LinearLayout child_item = (LinearLayout) getLayoutInflater().inflate(R.layout.pathgraphy_item_item, null, false);
final TextView content_item = (TextView) child_item.findViewById(R.id.content);
final CheckBox checkBox_item = (CheckBox) child_item.findViewById(R.id.checkBox);
if (TextUtils.isEmpty(model.getTemplateContent())) {
content_item.setText("无内容");
} else {
content_item.setText(model.getTemplateContent());
}
content_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkBox_item.setChecked(checkBox_item.isChecked() ? false : true);
}
});
checkBox_item.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if (isChecked) {
if (!addStringList.contains(model)) {
addStringList.add(model);
}
} else {
if (addStringList.contains(model)) {
addStringList.remove(model);
}
}
}
});
mainlly_item.addView(child_item);
}
mainlly.addView(child);
}
}
public List<PathographyTemplate> SortAllPathographyTemplate(List<PathographyTemplateModel> allSimples) {
List<PathographyTemplate> custWorkItems = new ArrayList<PathographyTemplate>();
// 游标index
int index = 0, j = 0;
int size = allSimples.size();
while (index < size) {
PathographyTemplate custWorkItem = new PathographyTemplate();
String t = allSimples.get(index).getTemplateType();
custWorkItem.setTemmplateName(t);
ArrayList<PathographyTemplateModel> children = new ArrayList<PathographyTemplateModel>();
for (j = index; j < size; j++) {
PathographyTemplateModel c = allSimples.get(j);
String child = c.getTemplateType();
if (t.equals(child)) {
// 同时记录该重复出现的元素在原数组中的下标j
children.add(c);
} else {
break;
}
}
// 往后推进游标index
index = j;
//Collections.sort(children);
custWorkItem.setSameList(children);
custWorkItems.add(custWorkItem);
}
// Collections.sort(custWorkItems);
return custWorkItems;
}
@Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行
public void onUserEvent(Integer event) {
}
@Event(type = View.OnClickListener.class, value = R.id.tv_insertPathography)
private void tv_insertPathography(View view) {
UIHelper.snackBarMessage(view, "ss");
}
}
//
长按多选
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@ContentView(R.layout.ta_doctoradvice_bypatient)
public class TA_AssessRecord extends TA_BaseActivity implements SwipeRefreshLayout.OnRefreshListener , ActionMode.Callback{
@ViewInject(R.id.swiperefreshlayout)
SwipeRefreshLayout mSwipeRefreshLayout;
@ViewInject(R.id.recycler)
RecyclerView mRecycler;
@ViewInject(R.id.emptyLayout)
protected EmptyLayout mErrorLayout;
AssessRecordItemAdapter mPatientsAdapter;
PatientModel patientModel;
private ActionMode actionMode;
public static TA_AssessRecord instance;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
instance = this;
initView();
initData();
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
protected void initView() {
mRepleace_toolbar.setVisibility(View.VISIBLE);
mToolbar.setVisibility(View.VISIBLE);
patientModel = (PatientModel) getIntent().getSerializableExtra(BundleCommon.KEY_Patient);
if (patientModel != null) {
String sex = "";
if (patientModel.getSex() != null) {
DictionaryModel dm = DictionalDao.getDictionaryByTypeId(1, patientModel.getSex());
if (dm != null) {
sex = dm.getDisplayname();
}
}
String age = patientModel.getAge() != null ? patientModel.getAge()+ "岁" : "";
String sickebed = patientModel.getSickbedNo()!=null?patientModel.getSickbedNo() +"床 " :"";
String title =sickebed + patientModel.getName() + " " + age + " " + sex;
mRepleace_toolbar.setText(title);
}
mToolbar.setTitle("");
setToolbarBackClose(R.mipmap.icon_close);
mToolbar.inflateMenu(R.menu.menu_worktask);
}
protected void initData() {
mSwipeRefreshLayout.setOnRefreshListener(this);
mSwipeRefreshLayout.setColorSchemeResources(
R.color.swiperefresh_color1, R.color.swiperefresh_color2,
R.color.swiperefresh_color3, R.color.swiperefresh_color4);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecycler.setLayoutManager(layoutManager);
mRecycler.setItemAnimator(new DefaultItemAnimator());
//设置adapter
mPatientsAdapter = new AssessRecordItemAdapter();
AlphaAnimatorAdapter animatorAdapter = new AlphaAnimatorAdapter(mPatientsAdapter, mRecycler);
mRecycler.setAdapter(animatorAdapter);
//mListView.setHasFixedSize(true);
mErrorLayout.setErrorType(EmptyLayout.NETWORK_LOADING);
mErrorLayout.setOnLayoutClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mErrorLayout.setErrorType(EmptyLayout.NETWORK_LOADING);
onRefresh();
}
});
onRefresh();
mPatientsAdapter.setOnItemClickLitener(new ListBaseAdapter.OnItemClickLitener() {
@Override
public void onItemClick(View view, int position) {
if (actionMode != null) {
// 如果当前处于多选状态,则进入多选状态的逻辑
// 维护当前已选的position
addOrRemove(position);
} else {
// 如果不是多选状态,则进入点击事件的业务逻辑
final NursingDocModel model = (NursingDocModel) mPatientsAdapter.mDatas.get(position);
EventBus.getDefault().post(new EBPathography(model.getName()+":"+model.getScoreTotal()+","));
finish();
}
}
@Override
public void onItemLongClick(View view, int position) {
if (actionMode == null) {
actionMode = startSupportActionMode(TA_AssessRecord.this);
}
}
});
}
private void getData() {
Call<List<NursingDocModel>> toServer = appContext.getAPIService().getNursingDoc(patientModel.getId());
toServer.enqueue(new Callback<List<NursingDocModel>>() {
@Override
public void onResponse(Call<List<NursingDocModel>> call, Response<List<NursingDocModel>> response) {
if(pdialog!=null) {
pdialog.dismiss();
}
setSwipeRefreshLoadedState();
if(response.code()==200) {
List<NursingDocModel> dto = response.body();
remove1(dto);
if(dto!=null && dto.size()>0) {
mErrorLayout.setErrorType(EmptyLayout.HIDE_LAYOUT);
mPatientsAdapter.clear();
Collections.sort(dto);
Collections.reverse(dto);
mPatientsAdapter.mDatas.addAll(dto);
mPatientsAdapter.notifyDataSetChanged();
} else {
mErrorLayout.setErrorType(EmptyLayout.NODATA);
}
}
}
private void remove1(List<NursingDocModel> dto) {
if(dto==null)return;
Iterator<NursingDocModel> it =dto.iterator();
while(it.hasNext()) {
NursingDocModel model = it.next();
if(model.getSourceType()!=null&&model.getSourceType().equals("1")) {
it.remove();
}
if(model.getSourceType()!=null&&model.getSourceType().equals("2")) {
it.remove();
}
}
}
@Override
public void onFailure(Call<List<NursingDocModel>> call, Throwable t) {
setSwipeRefreshLoadedState();
UIHelper.snackBarMessage(mToolbar, "网络超时");
mErrorLayout.setErrorType(EmptyLayout.NETWORK_ERROR);
if(pdialog!=null) {
pdialog.dismiss();
}
}
});
}
/**
* 设置顶部正在加载的状态
*/
public void setSwipeRefreshLoadingState() {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(true);
// 防止多次重复刷新
mSwipeRefreshLayout.setEnabled(false);
}
}
/**
* 设置顶部加载完毕的状态
*/
public void setSwipeRefreshLoadedState() {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(false);
mSwipeRefreshLayout.setEnabled(true);
}
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onRefresh() {
setSwipeRefreshLoadingState();
getData();
}
@Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行
public void onUserEvent(Integer event) {
}
public Set<Integer> positionSet = new HashSet<>();
private void addOrRemove(int position) {
if (positionSet.contains(position)) {
// 如果包含,则撤销选择
positionSet.remove(position);
} else {
// 如果不包含,则添加
positionSet.add(position);
}
if (positionSet.size() == 0) {
// 如果没有选中任何的item,则退出多选模式
actionMode.finish();
} else {
// 设置ActionMode标题
actionMode.setTitle(positionSet.size() + " 已选择");
// 更新列表界面,否则无法显示已选的item
mPatientsAdapter.notifyDataSetChanged();
}
}
@Event(type = View.OnClickListener.class, value = R.id.rrl_yz)
private void rrl_yz(View view) {
UIHelper.snackBarMessage(view, "ss");
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
if (actionMode == null) {
actionMode = mode;
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.menu_worktask, menu);
menu.findItem(R.id.action_right).setTitle("保存").setIcon(R.mipmap.icon_check);
return true;
} else {
return false;
}
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_right:
List<NursingDocModel> valueSet = new ArrayList<>();
for (int position : positionSet) {
valueSet.add((NursingDocModel) mPatientsAdapter.getData(position));
}
StringBuilder sb = new StringBuilder();
int size = valueSet.size();
for (int i = 0; i < size; i++) {
NursingDocModel model = (NursingDocModel) mPatientsAdapter.getData(i);
String s = model.getName()+":"+model.getScoreTotal();
if(i!=size-1) {
s.concat(",");
}
sb.append(s);
}
mode.finish();
EventBus.getDefault().post(new EBPathography(sb.toString()));
finish();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
actionMode = null;
positionSet.clear();
mPatientsAdapter.notifyDataSetChanged();
}
}