package cn.alphabets.light.ui; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.CheckBox; import android.widget.ListView; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import cn.alphabets.light.R; import cn.alphabets.light.application.ABSwipeBackActivity; import cn.alphabets.light.model.GsonParser; import cn.alphabets.light.model.ModelCategory; import cn.alphabets.light.network.Parameter; import cn.alphabets.light.setting.Default; /** * 选择 */ public class SelectActivity extends ABSwipeBackActivity { public static final String VALUE = "value"; public static final String VALUE_TEXT = "value_text"; public static final String TITLE = "title"; public static final String LIST = "list"; public static final String DEFAULT = "default"; public static final String MULTIPLE = "multiple"; // public static final String MODEL = "model"; // 传递数据的方式 public static final String THEME = "theme"; public static final String READONLY = "readonly"; private boolean isMultiple = true; private boolean isReadOnly = true; private SelectAdapter mAdapter; private static Parameter iParameter; public static void setParams(Parameter parameter) { iParameter = parameter; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设定Theme,需要在setContentView之前调用 Bundle extras = getIntent().getExtras(); if (extras != null) { int resourceId = extras.getInt(THEME, 0); if (resourceId != 0) { setTheme(resourceId); } } Helper.setNoIconBackActionBar(this, "Select"); setContentView(R.layout.activity_select); // 设定标题 if (extras != null) { String title = extras.getString(TITLE); if (title != null) { setTitle(title); } // 单选,多选模式 isMultiple = extras.getBoolean(MULTIPLE); // 只读,可编辑模式 isReadOnly = extras.getBoolean(READONLY); } // 初始化Adapter mAdapter = new SelectAdapter(this, R.layout.activity_select, isMultiple, isReadOnly); ListView listView = (ListView) findViewById(R.id.select_list); listView.setAdapter(mAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { SelectAdapter.SelectItem item = mAdapter.getItem(position); if (isMultiple) { ((CheckBox) view.findViewById(R.id.checked)).performClick(); } else { Intent data = new Intent(); data.putExtra(VALUE, item.value); data.putExtra(VALUE_TEXT, item.title); setResult(RESULT_OK, data); onBackPressed(); } } }); // 一览数据 if (extras != null) { String model = extras.getString(MODEL); if (model != null && model.equals("data")) { setData((ArrayList<SelectAdapter.SelectItem>)extras.get(LIST)); } else { fetchListData(); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { if (isMultiple) { MenuItem item = menu.add(Menu.NONE, android.R.id.edit, 1, "Save"); item.setIcon(R.drawable.tool_diskette_white); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); // 返回 if (id == android.R.id.home) { onBackPressed(); return true; } // 保存(只需要保存多选的) if (id == android.R.id.edit) { Intent data = new Intent(); ArrayList<String> values = new ArrayList<String>(); ArrayList<String> titles = new ArrayList<String>(); for (int i = 0; i < mAdapter.getCount(); i++) { SelectAdapter.SelectItem select = mAdapter.getItem(i); if (select.isChecked) { values.add(select.value); titles.add(select.title); } } data.putStringArrayListExtra(VALUE, values); data.putStringArrayListExtra(VALUE_TEXT, titles); setResult(RESULT_OK, data); onBackPressed(); return true; } return super.onOptionsItemSelected(item); } /** * 获取分类信息显示 */ private void fetchListData() { GET(Default.UrlCategoryList, iParameter, new Success() { @Override public void onResponse(JSONObject response) { GsonParser<ModelCategory> category = GsonParser.fromJson(response, ModelCategory.getListTypeToken()); List<ModelCategory> list = category.getData().getItems(); List<SelectAdapter.SelectItem> items = new ArrayList<>(); for (ModelCategory item : list) { items.add(new SelectAdapter.SelectItem(item.getName(), item.getCategoryId())); } mAdapter.addAll(items); mAdapter.notifyDataSetChanged(); } }); } /** * 显示给定的数据显示 * @param lists */ private void setData(ArrayList<SelectAdapter.SelectItem> lists) { if (lists != null) { mAdapter.addAll(lists); mAdapter.notifyDataSetChanged(); } } }