ANDROID 一个布局包含多个MultiSelectionSpinner

2024-04-25

我有一个xml具有 2 到 3 个多项选择微调器的布局。我也有一个提交按钮。

然后我的疑问是如何获得每个微调器的选定值。我也必须保存这些值。那么我怎样才能获得选定的值。我如何知道用户选择的微调器,我能够在 public void selectedStrings(List strings) 上获取所选值,但如何区分第一个微调器、第二个微调器和第三个微调器的值。你有什么主意吗..?

My code

    public class DashBoardOne  extends Fragment implements MultiSelectionSpinner.OnMultipleItemsSelectedListener{
         MultiSelectionSpinner multiSelectionSpinnerIndustry,multiSelectionSpinnerLocation;
         List<String> arrayIndustry,arrayLocation; 
         Button BtnSubmitAspiration;
        public DashBoardOne() {
            arrayIndustry = new ArrayList<String>();
        }

        public static DashBoardOne newInstance(String text) {
            DashBoardOne dashBoardOne = null;
             // some code
            return dashBoardOne;
        }

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view= inflater.inflate(R.layout.fragment_dashboard, container, false);

            multiSelectionSpinnerIndustry = (MultiSelectionSpinner) view.findViewById(R.id.SpinnerIndustry);
            arrayIndustry=db.fillIndustrySpinner(); // gettting the list for first spinner from db
            arrayLocation=db.fillLocationSpinner();  // gettting the list for 2nd spinner from db 

            multiSelectionSpinnerIndustry.setItems(arrayIndustry); //first spinner
            multiSelectionSpinnerIndustry.setListener(this);

            multiSelectionSpinnerLocation.setItems(arrayLocation); // 2nd spinner 
            multiSelectionSpinnerLocation.setListener(this);

            BtnSubmitAspiration=(Button)view.findViewById(R.id.BtnSubmitAspiration);

              BtnSubmitAspiration.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // here i have some code to save the data. How can i get the selected values for my each multiSelectionSpinner ?
                }
            });
    }


     @Override
        public void selectedIndices(List<Integer> indices) {
        }
        @Override
        public void selectedStrings(List<String> strings) {
            Toast.makeText(getActivity().ge

tApplicationContext(), 
        strings.toString(), Toast.LENGTH_LONG).show();  // here i am able to get the selected strings, 
                                                        //But i dont know how to diffrentiate the current value for which spinner 
    }
}

类 MultiSelectionSpinner

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.util.AttributeSet;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;


public class MultiSelectionSpinner extends Spinner implements
        OnMultiChoiceClickListener {

    public interface OnMultipleItemsSelectedListener{
        void selectedIndices(List<Integer> indices);
        void selectedStrings(List<String> strings);
    }
    private OnMultipleItemsSelectedListener listener;

    String[] _items = null;
    boolean[] mSelection = null;
    boolean[] mSelectionAtStart = null;
    String _itemsAtStart = null;

    ArrayAdapter<String> simple_adapter;

    public MultiSelectionSpinner(Context context) {
        super(context);

        simple_adapter = new ArrayAdapter<>(context,
                android.R.layout.simple_spinner_item);
        super.setAdapter(simple_adapter);
    }

    public MultiSelectionSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);

        simple_adapter = new ArrayAdapter<>(context,
                android.R.layout.simple_spinner_item);
        super.setAdapter(simple_adapter);
    }

    public void setListener(OnMultipleItemsSelectedListener listener){
        this.listener = listener;
    }

    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        if (mSelection != null && which < mSelection.length) {
            mSelection[which] = isChecked;
            simple_adapter.clear();
            simple_adapter.add(buildSelectedItemString());
        } else {
            throw new IllegalArgumentException(
                    "Argument 'which' is out of bounds.");
        }
    }

    @Override
    public boolean performClick() {
        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
        builder.setTitle("Please select!!!");
        builder.setMultiChoiceItems(_items, mSelection, this);
        _itemsAtStart = getSelectedItemsAsString();
        builder.setPositiveButton("Submit", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                System.arraycopy(mSelection, 0, mSelectionAtStart, 0, mSelection.length);
                listener.selectedIndices(getSelectedIndices());
                listener.selectedStrings(getSelectedStrings());
            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                simple_adapter.clear();
                simple_adapter.add(_itemsAtStart);
                System.arraycopy(mSelectionAtStart, 0, mSelection, 0, mSelectionAtStart.length);
            }
        });
        builder.show();
        return true;
    }

    @Override
    public void setAdapter(SpinnerAdapter adapter) {
        throw new RuntimeException(
                "setAdapter is not supported by MultiSelectSpinner.");
    }

    public void setItems(String[] items) {
        _items = items;
        mSelection = new boolean[_items.length];
        mSelectionAtStart = new boolean[_items.length];
        simple_adapter.clear();
        simple_adapter.add(_items[0]);
        Arrays.fill(mSelection, false);
        mSelection[0] = true;
        mSelectionAtStart[0] = true;
    }

    public void setItems(List<String> items) {
        _items = items.toArray(new String[items.size()]);
        mSelection = new boolean[_items.length];
        mSelectionAtStart  = new boolean[_items.length];
        simple_adapter.clear();
        simple_adapter.add(_items[0]);
        Arrays.fill(mSelection, false);
        mSelection[0] = true;
    }

    public void setSelection(String[] selection) {
        for (int i = 0; i < mSelection.length; i++) {
            mSelection[i] = false;
            mSelectionAtStart[i] = false;
        }
        for (String cell : selection) {
            for (int j = 0; j < _items.length; ++j) {
                if (_items[j].equals(cell)) {
                    mSelection[j] = true;
                    mSelectionAtStart[j] = true;
                }
            }
        }
        simple_adapter.clear();
        simple_adapter.add(buildSelectedItemString());
    }

    public void setSelection(List<String> selection) {
        for (int i = 0; i < mSelection.length; i++) {
            mSelection[i] = false;
            mSelectionAtStart[i] = false;
        }
        for (String sel : selection) {
            for (int j = 0; j < _items.length; ++j) {
                if (_items[j].equals(sel)) {
                    mSelection[j] = true;
                    mSelectionAtStart[j] = true;
                }
            }
        }
        simple_adapter.clear();
        simple_adapter.add(buildSelectedItemString());
    }

    public void setSelection(int index) {
        for (int i = 0; i < mSelection.length; i++) {
            mSelection[i] = false;
            mSelectionAtStart[i] = false;
        }
        if (index >= 0 && index < mSelection.length) {
            mSelection[index] = true;
            mSelectionAtStart[index] = true;
        } else {
            throw new IllegalArgumentException("Index " + index
                    + " is out of bounds.");
        }
        simple_adapter.clear();
        simple_adapter.add(buildSelectedItemString());
    }

    public void setSelection(int[] selectedIndices) {
        for (int i = 0; i < mSelection.length; i++) {
            mSelection[i] = false;
            mSelectionAtStart[i] = false;
        }
        for (int index : selectedIndices) {
            if (index >= 0 && index < mSelection.length) {
                mSelection[index] = true;
                mSelectionAtStart[index] = true;
            } else {
                throw new IllegalArgumentException("Index " + index
                        + " is out of bounds.");
            }
        }
        simple_adapter.clear();
        simple_adapter.add(buildSelectedItemString());
    }

    public List<String> getSelectedStrings() {
        List<String> selection = new LinkedList<>();
        for (int i = 0; i < _items.length; ++i) {
            if (mSelection[i]) {
                selection.add(_items[i]);
            }
        }
        return selection;
    }

    public List<Integer> getSelectedIndices() {
        List<Integer> selection = new LinkedList<>();
        for (int i = 0; i < _items.length; ++i) {
            if (mSelection[i]) {
                selection.add(i);
            }
        }
        return selection;
    }

    private String buildSelectedItemString() {
        StringBuilder sb = new StringBuilder();
        boolean foundOne = false;

        for (int i = 0; i < _items.length; ++i) {
            if (mSelection[i]) {
                if (foundOne) {
                    sb.append(", ");
                }
                foundOne = true;

                sb.append(_items[i]);
            }
        }
        return sb.toString();
    }

    public String getSelectedItemsAsString() {
        StringBuilder sb = new StringBuilder();
        boolean foundOne = false;

        for (int i = 0; i < _items.length; ++i) {
            if (mSelection[i]) {
                if (foundOne) {
                    sb.append(", ");
                }
                foundOne = true;
                sb.append(_items[i]);
            }
        }
        return sb.toString();
    }
}

单击按钮时,您可以获得每个微调器的选定项目。就像这样

spinner.getSelectedItem().toString();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ANDROID 一个布局包含多个MultiSelectionSpinner 的相关文章

随机推荐

  • 如何在本机反应中使用高度自动?

    在浏览器中 可以指定图像的宽度 并且可以将高度设置为自动 这将使图像在绑定到指定宽度的同时保留宽高比 高度和长宽比均事先未知 我怎样才能在本机反应中做同样的事情 Height 属性只能接受数字值 解决方法 得到Dimensions模块来自r
  • 如何展平嵌套 JSON

    尝试将嵌套的 json 响应从 2 层深度压平到 1 层 这是我在 Go Playground 上的工作代码 http play golang org p kHAYuZUTko http play golang org p kHAYuZUT
  • 找出 2 个日期之间的月数

    select age 2012 11 30 00 00 00 timestamp 2012 10 31 00 00 00 timestamp age 2012 12 31 00 00 00 timestamp 2012 10 31 00 0
  • 将MapPageRoute添加到asp.net mvc项目后,站点停止进入Home Controller

    我正在尝试在我的 asp net mvc 项目中路由 aspx Webforms 页面 我在 global asax 中注册该页面 routes IgnoreRoute resource axd pathInfo routes MapPag
  • 如何使用 VS Code 浏览器进行导航

    这是一个关于 VS Code 资源管理器窗口导航的问题 在 Windows 资源管理器应用程序中 我可以立即导航到我选择的任何文件 如果 Windows 资源管理器窗口以升序名称顺序显示我的文件夹或文件 我可以通过键入我要查找的文件 文件夹
  • 获取 angular2 中表单的所有值

    我可以使用以下代码获取表单的值
  • 查找集合列表中不相交集合对的数量

    问题陈述如下 给定一个包含 n 个集合的列表 每个集合包含 k 个整数 找到不相交集合对的数量 假设集合的可能元素为正 且上界为 c gt n 并且假设 k 我试图想出一种有效的算法来比 O kn 2 更快地解决这个问题 这是简单解决方案的
  • 使用java将当前GMT时间转换为CST时区

    我正在尝试使用 JDK8 将当前 GMT 时间转换为 CST 时间 但我的代码总是为两个时区返回相同的时间 我还验证了 getAvailableIDs 具有 CST Calendar cal Calendar getInstance Tim
  • ASP.NET WebForms:短路验证

    我有一个正在验证的网格文本框
  • Django AJAX JSON 响应在浏览器中显示为原始文本

    我正在 Pinax 框架内使用 Django 1 4 2 开发一个 Stripe Web 应用程序 django stripe 付款 艾尔达瑞安 阿贾克斯 我已经一切正常 除了 ajax 响应 JSON 格式 似乎没有被任何 ajax 回调
  • 将聚合查询结果映射到 hibernate 对象

    是否可以将聚合查询的结果映射到 hibernate 支持的域对象中的字段 例如 如果我有一个如下所示的 Car 对象 Entity public class Car Id private int id Column private Stri
  • iOS - 本地通知 - cancelAllLocalNotifications

    可能是一个简单的问题 当我调用 cancelAllLocalNotifications 时 它是仅取消该应用程序创建的通知还是也会取消来自其他应用程序的所有通知 其他应用程序创建的通知不会受到影响 From 本地和推送通知编程指南 http
  • 最好的“忘记密码”方法是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 忘记密码 实现忘记密码功能的最佳方法是什么 https stackoverflow com questions 522967 forgot password what is the best meth
  • 使用 ruby​​ 的正则表达式来匹配句子中的主题标签

    我正在尝试使用 ruby on Rails 为一个简单的大学项目提取主题标签 我面临着仅包含数字的标签和没有空格的标签的问题 text Pack my box with 5 dozen liquor jugs link com liquor
  • SnapKit:如何以编程方式设置 TableView 单元格中项目的布局约束

    我是 swift iOS 开发的初学者 来自 Web 开发 与 DOM Box 模型相比 布局模型对我来说完全令人困惑 我知道这意味着要头脑清醒 但对于我来说 我似乎无法弄清楚 我希望像这样的基本示例可以帮助说明一些事情 即使我正在使用 D
  • 错误:您必须使用“set”方法来更新条目修复吗?

    我使用 codeigniter 作为我的 PHP 框架 当我将 from to post 提交到数据库时 我不断收到此错误 You must use the set method to update an entry 我不太确定这意味着什么
  • 页面源没有动态 div 元素

    我在 jquery 中动态添加 div 的内容 它被添加到 DOM 中 但在查看页面源代码时我看不到元素的动态内容 div div btn click function pdf html ffff 进行动态更改后如何获取更新的页面源 它已添
  • AngularJS:如何显示预加载或加载直到页面完全加载?

    我有一个图像库网站 我在控制器中以 json 格式从数据库获取所有图像和图像相关数据 然后使用 ng repeat 将它们与 html 绑定 现在 数据加载较早 但图像加载较晚 因此图像比较分散 怎么解决这个问题 我不想使用 setTime
  • Android 模拟器在启动时永远挂起

    模拟器已启动 但未启动进一步的 android 闪烁文本 开始于 Android Sdk emulator emulator Nexus 5X API 25 verbose 日志中仅重复记录 emulator MemoryReport Ep
  • ANDROID 一个布局包含多个MultiSelectionSpinner

    我有一个xml具有 2 到 3 个多项选择微调器的布局 我也有一个提交按钮 然后我的疑问是如何获得每个微调器的选定值 我也必须保存这些值 那么我怎样才能获得选定的值 我如何知道用户选择的微调器 我能够在 public void select