使用枚举将数据传递给listviews

时间:2014-08-11 13:10:30

标签: java android listview android-listview enums

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

Listview1将在中间行中保留标题,abbrs和一个EditTextListview2将保留标题,abb和另外一个TextView,它们将根据EditText输入和枚举值进行更新。我意识到我需要两个自定义适配器,一个用于异构Listview1,另一个用于Listview2。 我在实现时有点迷失,并且只尝试为Listview2执行自定义适配器。

我已经尝试过查看多个SO问题,以及使用数据库模型的listview教程,然后尝试使用它但使用我的静态枚举列表,但我只是有点迷失。高级方法,细节或一个很好的教程的任何帮助将非常感激。我可能甚至没有在正确的道路上走近,因为我是Android的新手,而且在OOP上相对较新,感谢你对糟糕的代码的支持!

我到目前为止(我设置了一个测试项目,这就是为什么我将这个listview在main中膨胀而不是在片段中 - 如果除了切换上下文之外还有任何问题,请告诉我):< / p>

包含所有枚举的枚举类

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的自定义适配器:

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);


}
}

1 个答案:

答案 0 :(得分:0)

您的列表“pressureUnits”为空。您已指定它是压力列表但未添加任何内容。通常这是通过“add”方法完成的,即pressureUnits.add(...)。

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