0

別のモデル「WeatherCondition」の SparseArray を含む「DayForecast」のモデルを取得しました。このモデルには、3 時間ごとの気象条件に関するいくつかの情報があります (そこには 8 つの気象条件モデルがあります)。

DayForecast.java:

public class DayForecast implements Serializable {

private String mDate;
private String mDescription;
private SparseArray<WeatherCondition> mWeatherConditions = new SparseArray<WeatherCondition>();

public WeatherCondition getWeatherCondition(int timeInHours) {
    // return null if no weather condition was set
    WeatherCondition weatherCondition = mWeatherConditions.get(timeInHours);
    // or you could add some other logic here, if you would want the next available weather condition,
    // but make sure to reflect that in the method name
    return weatherCondition;
}

public void setWeatherCondition(int timeInHours, WeatherCondition weatherCondition) {
    mWeatherConditions.append(timeInHours, weatherCondition);
}



public String getmDate() {
    return mDate;
}

public void setmDate(String mDate) {
    this.mDate = mDate;
}

public String getmDescription() {
    return mDescription;
}

public void setmDescription(String mDescription) {
    this.mDescription = mDescription;
}

}

WeatherCondition.java

public class WeatherCondition {

public int getTime() {
    return mTime;
}

public void setTime(int time) {
    this.mTime = time;
}

private int mTime;
private String mTemperature;
private String mWindSpeed;
private String mDirection;

public WeatherCondition(int time,String temperature, String windSpeed, String direction) {
    mTime = time;
    mTemperature = temperature;
    mWindSpeed = windSpeed;
    mDirection = direction;
}

// ... setter and getter methods ...

public String getmTemperature() {
    return mTemperature;
}

public void setmTemperature(String mTemperature) {
    this.mTemperature = mTemperature;
}

public String getmWindSpeed() {
    return mWindSpeed;
}

public void setmWindSpeed(String mWindSpeed) {
    this.mWindSpeed = mWindSpeed;
}

public String getmDirection() {
    return mDirection;
}

public void setmDirection(String mDirection) {
    this.mDirection = mDirection;
}
}

Fragment.java:

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle args = getArguments();
    dayForecast = (DayForecast) args.getSerializable("object");


}

私がやりたいことは、私のフラグメントに WeatherConditions の listView を構築することです。

フラグメントに渡された DayForecast オブジェクトの他のデータを正常に取得しましたが、気象条件を取得して listView を構築するのに苦労しています。

誰か助けてくれませんか?

どうも

4

1 に答える 1

0

ListView にはアダプターが必要なので、主に行う必要があるのは、気象条件ごとに ListView 項目を作成するアダプターを作成することです。このようなもの:

public static class WeatherAdapter extends BaseAdapter {

    private final LayoutInflater inflater;
    private final SparseArray<WeatherCondition> weatherConditions;

    public WeatherAdapter(LayoutInflater inflater, SparseArray<WeatherCondition> weatherConditions) {
        this.inflater = inflater;
        this.weatherConditions = weatherConditions;
    }

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

    @Override
    public WeatherCondition getItem(int position) {
        return weatherConditions.valueAt(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.weather_list_item, parent);
        }
        WeatherCondition weatherCondition = getItem(position);
        //TODO configure the views in weather_list_item using data in weatherCondition
        return convertView;
    }
}

次に、アダプターをビューに接続するだけです。Fragment の onCreate メソッドのコードを示しましたが、実際には onCreateView でこの作業を行う必要があります。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Bundle args = getArguments();
    dayForecast = (DayForecast) args.getSerializable("object");

    View rootView = inflater.inflate(R.layout.forecast_fragment, container, true);
    ListView weatherLV = (ListView) rootView.findViewById(R.id.weather_list);
    weatherLV.setAdapter(new WeatherAdapter(inflater, dayForecast.getConditions()));
    return rootView;
}

WeatherCondition の SparseArray ではなく、DayForecast オブジェクトを中心にアダプターを構築することを好むかもしれませんが、それは簡単な変更です。また、もちろん、フラグメント全体 (forecast_fragment) と各リスト アイテム (weather_list_item) の 2 つのレイアウト ファイルが必要になります。

于 2014-11-13T03:42:53.387 に答える