Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用枚举将数据传递给ListView_Java_Android_Listview_Android Listview_Enums - Fatal编程技术网

Java 使用枚举将数据传递给ListView

Java 使用枚举将数据传递给ListView,java,android,listview,android-listview,enums,Java,Android,Listview,Android Listview,Enums,我试图使用多个枚举作为主类的子类,作为单独片段上ListView的数据源。 每个片段将有两个listview,但每个listview只需要使用数据的某些部分。每个枚举有两个字符串name和abbr以及一个双精度值。 我想将这两个字符串都设置为ListView标题,并在计算中使用该值 Listview1将在中心行中保存标题、缩写和一个编辑文本。Listview2将保存标题、缩写和另一个TextView,该TextView将根据EditText输入和枚举中的值进行更新。我意识到为此需要两个自定义适配

我试图使用多个枚举作为主类的子类,作为单独片段上ListView的数据源。 每个片段将有两个listview,但每个listview只需要使用数据的某些部分。每个枚举有两个字符串name和abbr以及一个双精度值。 我想将这两个字符串都设置为ListView标题,并在计算中使用该值

Listview1将在中心行中保存标题、缩写和一个编辑文本。Listview2将保存标题、缩写和另一个TextView,该TextView将根据EditText输入和枚举中的值进行更新。我意识到为此需要两个自定义适配器,一个用于异构Listview1,另一个用于Listview2。 我对实现有点迷茫,只尝试过为Listview2定制适配器

我试过看多个SO问题,以及使用数据库模型的listview教程,然后试着使用这些,但是我的静态枚举列表,但是我只是有点迷茫。任何来自高级方法、细节或优秀教程的帮助都将不胜感激。我可能还没有接近正确的道路,因为我是Android新手,在OOP方面也相对较新,感谢您对糟糕代码的容忍

到目前为止,我已经建立了一个测试项目,这就是为什么我将此listview主要扩展为一个片段,而不是一个片段-如果除了切换上下文之外还有其他问题,请告诉我:

包含所有枚举的枚举类

public class Enums {

public enum Pressures{
    ITEM1        ("name", "abbr", 1.0),
    etc...;

    private final String name;
    private final String abbr;
    private final double value;

    Pressures(String name, String abbr, double value) {
        this.name = name;
        this.abbr = abbr;
        this.intermediary = intermediary;
    }

    public String getNames() {
        return name;
    }

    public String getAbbr() {
        return abbr;
    }

    public double getIntermediary() {
        return intermediary;
    }
}

public enum Enum2 {
...
}
}
Listview2的自定义适配器:

主要内容:


您的压力单位列表为空。您已经指定它是一个压力列表,但没有添加任何内容。通常这是通过add方法完成的,即pressureUnits.add


但是,我认为您要使用的是Enums.Pressures.values。这将返回一个包含每个枚举元素的数组。然后,您将能够使用该阵列创建适配器。如果无法使用现在使用的BaseAdapter,请查看使用ArrayAdapter类而不是BaseAdapter。

是否尝试过使用Enums.Pressures.values;返回枚举数组中的所有压力。压力[]?不过,您仍然需要一个自定义适配器。我很惊讶你能访问枚举。但是像这样的压力没有被指定为公共静态枚举。@Java中的枚举在默认情况下是静态的,不需要声明为静态的。从我对它们的研究中我知道一件事!另外,谢谢你的回复。我知道我忽略了一些简单的东西。哦,我明白了,这解释了为什么你当时可以访问它。如果您需要显示枚举中的所有数据,我还是希望使用Enums.Pressures.values,而不是列表,顺便说一下,列表是空的,因为它似乎没有初始化任何内容。@Zhu谢谢,我意识到它现在是空的。如果我只想显示某些数据字段,而不是每个枚举的所有数据,我会遇到任何问题吗?从技术上讲,值为数组中特定枚举的每个枚举值,因此如果需要限制显示的数量,您可能应该坚持列表,只需使用所需的任何一个进行初始化即可。谢谢您的回复。。我会在enum类中使用.values方法并将其存储在要调用的数组中吗?或者我会在我的主类中使用方法吗?在主类中,而不是现在的列表中。使用的values方法提供数组。
public class CustomAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Enums.Pressures> pressureEnum;


public CustomAdapter(Activity activity, List<Enums.Pressures> units) {
    this.activity = activity;
    this.pressureEnum = units;
}

@Override
public int getCount() {
    return pressureEnum.size();
}

@Override
public Object getItem(int location) {
    return pressureEnum.get(location);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.list_row, null);

    TextView name = (TextView) convertView.findViewById(R.id.name);
    TextView abbr = (TextView) convertView.findViewById(R.id.abbr);

    Enums.Pressures p = pressureEnum.get(position);

    name.setText(p.getNames());
    abbr.setText(p.getAbbr());

    return convertView;
}

}
public class Main extends Activity {

//This List was a poor attempt at setting the list from the enum
//I don't believe ArrayList is the proper choice as I have an enum object
//but I'm not quite sure what to use
private List<Enums.Pressures> pressureUnits = new ArrayList<Enums.Pressures>();
private ListView listView;
private CustomAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.list);
    adapter = new CustomAdapter(this, pressureUnits);
    listView.setAdapter(adapter);


}
}