Java 使用枚举将数据传递给ListView
我试图使用多个枚举作为主类的子类,作为单独片段上ListView的数据源。 每个片段将有两个listview,但每个listview只需要使用数据的某些部分。每个枚举有两个字符串name和abbr以及一个双精度值。 我想将这两个字符串都设置为ListView标题,并在计算中使用该值 Listview1将在中心行中保存标题、缩写和一个编辑文本。Listview2将保存标题、缩写和另一个TextView,该TextView将根据EditText输入和枚举中的值进行更新。我意识到为此需要两个自定义适配器,一个用于异构Listview1,另一个用于Listview2。 我对实现有点迷茫,只尝试过为Listview2定制适配器 我试过看多个SO问题,以及使用数据库模型的listview教程,然后试着使用这些,但是我的静态枚举列表,但是我只是有点迷茫。任何来自高级方法、细节或优秀教程的帮助都将不胜感激。我可能还没有接近正确的道路,因为我是Android新手,在OOP方面也相对较新,感谢您对糟糕代码的容忍 到目前为止,我已经建立了一个测试项目,这就是为什么我将此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输入和枚举中的值进行更新。我意识到为此需要两个自定义适配
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);
}
}