【问题标题】:Assigning ArrayList value into a Variable将 ArrayList 值分配给变量
【发布时间】:2015-07-15 18:57:33
【问题描述】:

我在如何在变量中传递 arrayList 的所有值时遇到问题。有没有办法可以将不同单选按钮的所有值获取到单个变量中。这是我的带有评论的程序

ArrayList < String > list1 = new ArrayList < String > ();
String rg1 = "*";
String rg2 = "*";
String rg4 = "*";
String rg5 = "*";
list1 = "*"; // Getting error here it only accepts string , how  declare list1 with ArrayList
theFilter[5] = "0";
if (cbRegAffil.isChecked()) {
    int reg = rgRegAffil.getCheckedRadioButtonId();
    RadioButton rBtReg = (RadioButton) dia.findViewById(reg);
    rg1 = (String) rBtReg.getText();

}
if (cbAdmin.isChecked()) {
    int adm = rgAdmin.getCheckedRadioButtonId();
    RadioButton rBtAdm = (RadioButton) dia.findViewById(adm);
    rg2 = (String) rBtAdm.getText();
}

if (cbAmbience.isChecked()) {
    int amb = rgAmbience.getCheckedRadioButtonId();
    RadioButton rBtAmbience = (RadioButton) dia.findViewById(amb);
    rg4 = (String) rBtAmbience.getText();
}
if (cbTuition.isChecked()) {
    theFilter[5] = spin.getSelectedItem()
        .toString();
}

if (cbSpecialty.isChecked()) {
    int spec = rgSpecialty.getCheckedRadioButtonId();
    int spec2 = rgSpecialty2.getCheckedRadioButtonId();
    RadioButton rBtSpec = (RadioButton) dia.findViewById(spec);
    RadioButton rBtSpec2 = (RadioButton) dia.findViewById(spec2);
    list1.add((String) rBtSpec.getText());
    list1.add((String) rBtSpec2.getText());

}

TuitionFee = Integer.parseInt(theFilter[5]);
theFilter[0] = rg1;
theFilter[1] = rg2;
theFilter[3] = rg4;
theFilter[4] = rg5;
theFilter[6] = list1; // getting error within this part, how can I assign arrayList values here ?
fragment = new SchoolListFragmentFilter();
getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.content_frame, fragment)
    .addToBackStack(null).commit();
mDrawerLayout.closeDrawer(expListView);
dia.dismiss();

这里是我从单选按钮中过滤这些值的地方

if (sReg[loop].equalsIgnoreCase(thisFilter[0])
                && sAdmin[loop].equalsIgnoreCase(thisFilter[1])
                && sAmbience[loop].equalsIgnoreCase(thisFilter[3])
                && amountTF >= theTuitionFee
                && sSpecialty[loop][subloop].equalsIgnoreCase(thisFilter[4])
                && sSpecialty[loop][subloop].equalsIgnoreCase(thisFilter[6])

这是用于过滤 sReg 并从其余部分中全选的附加程序。

(sReg[loop].equalsIgnoreCase((String)thisFilter[0])
                && ((String)thisFilter[1]).equalsIgnoreCase("*")
                && ((String)thisFilter[3]).equalsIgnoreCase("*") 
                && amountTF == 0
                && ((String)thisFilter[4]).equalsIgnoreCase("*")
                && ((String)thisFilter[6]).equalsIgnoreCase("*")) {
            list.add(sList[loop]);

【问题讨论】:

  • 您可能想要使用add() 方法。 list1.add("*");
  • 过滤器[5]是字符串吗。
  • 公共静态字符串 theFilter[] = new String[6];在这里,先生
  • 应该像 theFilter[5]=(String)list1.get(0);//根据索引'0'从列表对象中获取值。

标签: java checkbox arraylist


【解决方案1】:

list1 = "*"; 替换为list1.add("*");

或者你可以在构造函数中这样做:

List<String> list1 = new ArrayList<>(Arrays.asList("val1", "val2", "val3"));

这个theFilter[6] = list1; 现在可以通过下面的编辑来实现。

编辑:

将字符串 theFilter[]=newString[6] 替换为 Object theFilter[]=new Object[6]

if (sReg[loop].equalsIgnoreCase(thisFilter[0])
                && sAdmin[loop].equalsIgnoreCase(thisFilter[1])
                && sAmbience[loop].equalsIgnoreCase(thisFilter[3])
                && amountTF >= theTuitionFee
                && sSpecialty[loop][subloop].equalsIgnoreCase(thisFilter[4])
                && sSpecialty[loop][subloop].equalsIgnoreCase(thisFilter[6])

作者:

if (sReg[loop].equalsIgnoreCase((String)thisFilter[0])
                && sAdmin[loop].equalsIgnoreCase((String)thisFilter[1])
                && sAmbience[loop].equalsIgnoreCase((String)thisFilter[3])
                && amountTF >= theTuitionFee
                && sSpecialty[loop][subloop].equalsIgnoreCase((String)thisFilter[4])
                && filtered(sSpecialty[loop][subloop], (List<String>)thisFilter[6]))

和你的过滤方法:

private boolean filteredOne(String val, List<String> values) {
  boolean b = false;
  for(String s:values) {
    b |= s.equalsIgnoreCase(val);
  }
  return b;// true if one is equal
}

private boolean filteredAll(String val, List<String> values) {
  boolean b = true;
  for(String s:values) {
    b &= s.equalsIgnoreCase(val);
  }
  return b;// true if all are equal
}

【讨论】:

  • 它有效,先生,在程序的下部怎么样?那里也出现错误
  • 这是否意味着我只能从我的 ArrayList 中选择 1 个值?有没有办法可以获取所有值并过滤二维数组?我将在我使用此过滤器的地方编辑我的帖子
  • @carljohnsantos:有一些改变(见编辑)是可能的。我把测试和错误处理留给你。祝你好运:)
  • 我会试试先生。真的很有帮助
  • 它现在可以工作了,先生,但是当我启动我的应用程序时,它会因为这部分而崩溃 && 过滤(sSpecialty[loop][subloop], (List)thisFilter[6])) 它说 java.lang.String 不能转换为 java.util.List。对不起先生,这是我第一次创建android应用程序,也是我第一次遇到这些问题。
【解决方案2】:
list1 = "*"; //error

因为我们必须使用ArrayList#add(Object)方法给list obj添加一个值。

list1.add("*");//correct

theFilter[5]=(String)list1.get(0);//to get a value from list object based on given index position.

ArrayList#get(int) 方法从列表 obj 中获取值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多