Android 按每个cardview中的编号订购cardview
我现在已经知道了,当用户按下FAB时,一个cardview被添加到recyclerview中。在每个cardview中都有一个微调器、eddittext、textview和复选框 微调器由csv的一列中的项目填充。当用户从微调器中选择一个项目时,同一csv中另一列项目的CoreSponding编号将显示在同一cardview的textview中 然后我的应用程序看起来像这样,数字就是文本视图 问题我想知道是否有可能,当用户从微调器中选择一个项目并且数字显示在文本视图中时,cardview是否有可能按照每个cardview中的数字顺序自动排序?那么按照上面的图片,如果要订购,它会是什么样子 薯片-0 咖啡-1 巧克力-6 冰淇淋-14 ProductAdapter.javaAndroid 按每个cardview中的编号订购cardview,android,Android,我现在已经知道了,当用户按下FAB时,一个cardview被添加到recyclerview中。在每个cardview中都有一个微调器、eddittext、textview和复选框 微调器由csv的一列中的项目填充。当用户从微调器中选择一个项目时,同一csv中另一列项目的CoreSponding编号将显示在同一cardview的textview中 然后我的应用程序看起来像这样,数字就是文本视图 问题我想知道是否有可能,当用户从微调器中选择一个项目并且数字显示在文本视图中时,cardview是否有
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder> {
private Map<Integer, Integer> mSpinnerSelectedItem = new HashMap<Integer, Integer>();
private Map<String, String> numberItemValues = new HashMap<>();
private List<Product> productList;
private Activity create;
//TODO CODE FOR CSV FILE
InputStream inputStream = null;
List<String> mSpinnerItems = null;
CSVFile csvFile = null;
//TODO END OF CODE FOR CSV FILE
public ProductAdapter(Activity activity) {
create = activity;
}
public ProductAdapter(Activity activity, List<Product> productList, Map<String, String> numberList) {
numberItemValues = numberList;
create = activity;
this.productList = productList;
}
@Override
public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//inflating and returning our view holder
LayoutInflater inflater = LayoutInflater.from(create);
View view = inflater.inflate(R.layout.layout_products, null);
return new ProductViewHolder(view);
}
@Override
public void onBindViewHolder(final ProductViewHolder holder, final int position) {
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(create, R.layout.item_spinner_layout,
Product.getSpinnerItemsList());
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
holder.spinner.setAdapter(spinnerArrayAdapter);
holder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int mPosition, long id) {
mSpinnerSelectedItem.put(position, mPosition);
TextView mTextView = view.findViewById(R.id.mSpinnerText);
String currentItem = holder.spinner.getItemAtPosition(mPosition).toString();
Set<String> set = numberItemValues.keySet(); for(String key : set) {String value = numberItemValues.get(key);
Log.e("DATA ", "key = " + key + " value = " + value); }
String aisleNumber = numberItemValues.get(currentItem);
holder.textView5.setText(aisleNumber);
Log.e("SELECTION TEST", " Selected map item = " + aisleNumber );
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//binding the data with the viewholder views
if (mSpinnerSelectedItem.containsKey(position)) {
holder.spinner.setSelection(mSpinnerSelectedItem.get(position));
}
holder.getView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(create);
// set title
alertDialogBuilder.setTitle("Delete Item");
// set dialog message
alertDialogBuilder
.setMessage("Are you sure you want to delete this item?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// if this button is clicked, close
// current activity
holder.checkBox.setChecked(false);
holder.spinner.setSelection(0);
productList.remove(holder.getAdapterPosition());
notifyItemRemoved(holder.getAdapterPosition());
Toast.makeText(create, "Item removed.", Toast.LENGTH_LONG).show();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
});
}
@Override
public int getItemCount() {
return productList.size();
}
public void reset() {
/* holder.checkBox.setChecked(false);
holder.spinner.setSelection(0);*/
productList.clear();
notifyDataSetChanged();
}
class ProductViewHolder extends RecyclerView.ViewHolder {
SearchableSpinner spinner;
EditText editText;
TextView textView5;
CheckBox checkBox;
LinearLayout linearLayout;
View rootView;
public ProductViewHolder(View itemView) {
super(itemView);
spinner = itemView.findViewById(R.id.spinner);
editText = itemView.findViewById(R.id.editText);
textView5 = itemView.findViewById(R.id.textView5);
checkBox = itemView.findViewById(R.id.checkBox);
rootView = itemView.findViewById(R.id.linearLayout);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// makes the set disappear when checkbox is ticked.
if(isChecked){
checkBox.setChecked(false);
spinner.setSelection(0);
productList.remove(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());
Toast.makeText(create, "Done!", Toast.LENGTH_LONG).show();
}
}
});
}
public View getView() {
return rootView;
}
}
//TODO CODE FOR CSV FILE
private class CSVFile {
InputStream inputStream;
public CSVFile(InputStream inputStream) {
this.inputStream = inputStream;
}
public List<String> read() {
List<String> resultList = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String line;
while ((line = reader.readLine()) != null) {
String[] row = line.split(",");
numberItemValues.put(row[1], row[0]);
resultList.add(row[1]);
}
} catch (IOException e) {
Log.e("Main", e.getMessage());
} finally {
try {
inputStream.close();
} catch (IOException e) {
Log.e("Main", e.getMessage());
}
}
return resultList;
}
}
}
公共类ProductAdapter扩展了RecyclerView.Adapter{
私有映射mSpinnerSelectedItem=newhashmap();
private Map numberItemValues=new HashMap();
私有列表产品列表;
私人活动创造;
//CSV文件的TODO代码
InputStream InputStream=null;
列表mSpinnerItems=null;
CSVFile CSVFile=null;
//CSV文件的TODO结束代码
公共产品适配器(活动){
创造=活动;
}
公共产品适配器(活动活动、列表产品列表、地图编号列表){
numberItemValues=numberList;
创造=活动;
this.productList=productList;
}
@凌驾
公共产品ViewHolder onCreateViewHolder(视图组父级,int-viewType){
//膨胀并返回我们的视图持有者
LayoutFlater充气机=LayoutFlater.from(创建);
视图=充气机。充气(R.layout.layout\u产品,空);
返回新的ProductViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(最终产品视图持有人,最终整数位置){
ArrayAdapter微调器ArrayAdapter=新的ArrayAdapter(创建,R.layout.item_微调器_布局,
Product.getSpinnerItemsList());
spinnerrayadapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
保持架.旋转器.设置适配器(旋转器适配器);
holder.spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父级、视图视图、整数组合、长id){
mSpinnerSelectedItem.put(位置、位置);
TextView mTextView=view.findviewbyd(R.id.mSpinnerText);
String currentItem=holder.spinner.getItemAtPosition(mPosition.toString();
Set Set=numberItemValues.keySet();for(字符串键:Set){String value=numberItemValues.get(键);
Log.e(“数据”、“键=“+key+”值=“+value”);}
字符串aisleNumber=numberItemValues.get(currentItem);
holder.textView5.setText(aisleNumber);
Log.e(“选择测试”,“所选地图项目=”+aisleNumber);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
//将数据与viewholder视图绑定
if(mSpinnerSelectedItem.containsKey(位置)){
holder.spinner.setSelection(mSpinnerSelectedItem.get(position));
}
holder.getView().setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
AlertDialog.Builder alertDialogBuilder=新建AlertDialog.Builder(创建);
//定名
alertDialogBuilder.setTitle(“删除项”);
//设置对话框消息
alertDialogBuilder
.setMessage(“确实要删除此项目吗?”)
.setCancelable(错误)
.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
//如果单击此按钮,请关闭
//当前活动
holder.checkBox.setChecked(false);
保持器.微调器.设置选择(0);
productList.remove(holder.getAdapterPosition());
notifyItemRemoved(holder.getAdapterPosition());
Toast.makeText(创建“项目已删除”,Toast.LENGTH_LONG).show();
}
})
.setNegativeButton(“否”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int-id){
//如果单击此按钮,只需关闭
//打开对话框,不执行任何操作
dialog.cancel();
}
});
//创建警报对话框
AlertDialog AlertDialog=alertDialogBuilder.create();
//表现出来
alertDialog.show();
}
});
}
@凌驾
public int getItemCount(){
返回productList.size();
}
公共无效重置(){
/*holder.checkBox.setChecked(false);
保持器.微调器.设置选择(0)*/
productList.clear();
notifyDataSetChanged();
}
类ProductViewHolder扩展了RecyclerView.ViewHolder{
可搜索微调器微调器;
编辑文本编辑文本;
文本视图文本视图5;
复选框;
线性布局线性布局;
视图根视图;
公共产品视图持有者(视图项视图){
public class create extends AppCompatActivity {
//a list to store all the products
List<Product> productList;
//the recyclerview
RecyclerView recyclerView;
Product mProduct;
private Map<String, String> numberItemValues = new HashMap<>();
private Map<Integer, Integer> mSpinnerSelectedItem = new HashMap<Integer, Integer>();
// RelativeLayout relativeLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create);
findViewById(R.id.relativeLayout).requestFocus();
findViewById(R.id.relativeLayout).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
});
//opens csv
InputStream inputStream = getResources().openRawResource(R.raw.shopitems);
CSVFile csvFile = new CSVFile(inputStream);
final List<String> mSpinnerItems = csvFile.read();
//getting the recyclerview from xml
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//initializing the productlist
productList = new ArrayList<>();
productList.add(new Product(mSpinnerItems, "Test Edit Text",false, "Text String 2"));
final ProductAdapter adapter = new ProductAdapter(this, productList, numberItemValues);
//TODO FAB BUTTON
FloatingActionButton floatingActionButton =
findViewById(R.id.fab);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
productList.add(mProduct);
if(adapter != null)
adapter.notifyDataSetChanged();
//Handle the empty adapter here
}
});
//setting adapter to recyclerview
recyclerView.setAdapter(adapter);
}
//TODO OVERFLOW MENU
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_delete) {
((ProductAdapter) recyclerView.getAdapter()).reset();
Toast.makeText(create.this,
"Shopping List Deleted.", Toast.LENGTH_LONG).show();
return true;
}
if (id == R.id.action_help) {
// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Help");
builder.setMessage("Click the button in the bottom right corner to add an item. Touch the dropdown menu and begin typing" +
"the item you want. The aisle number will then show. You are also able to enter in the quantity you want, for your reference." +
"If you made a mistake you can always click the surrounding white box to delete the item. Once you have got the item you" +
"can touch the checkbox. If you want to delete your whole list, press the menu button on your device or the 3 dots in the corner and press" +
"delete.");
// add a button
builder.setPositiveButton("OK", null);
// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();
}
return super.onOptionsItemSelected(item);
}
private class CSVFile {
InputStream inputStream;
public CSVFile(InputStream inputStream) {
this.inputStream = inputStream;
}
public List<String> read() {
List<String> resultList = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String line;
while ((line = reader.readLine()) != null) {
String[] row = line.split(",");
//TODO I edited this part so that you'd add the values in our new hash map variable
numberItemValues.put(row[1], row[0]);
resultList.add(row[1]);
}
} catch (IOException e) {
Log.e("Main", e.getMessage());
} finally {
try {
inputStream.close();
} catch (IOException e) {
Log.e("Main", e.getMessage());
}
}
return resultList;
}
}
}
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
int position, long id) {
adapter.sortDataSet();
});
public void sortDataSet(){
//sort dataSet (arrayList, etc)
notifyDataSetChanged();
}
class Product implements Comparable<Product> {
@Override
public int compareTo(Product other) {
return Integer.compare(this.IntField, other.IntField);
}
}