05.05.2017
private View overview;
//RecyclerView
private RecyclerView.Adapter overviewAdapter;
private LinearLayoutManager llm;
private ArrayList<OverviewItem> overviewItems;
private RecyclerView overviewArray;
private String name, location;
private ArrayList<RoomItem> valueList;
public OverviewItem(String name, String location, ArrayList<RoomItem> valueList){
this.name = name;
this.location = location;
this.valueList = valueList;
}
/**
* Gibt den Namen des Items zurück
* @return
*/
public String getName(){
return name;
}
/**
* Gibt die Location des Items zurück
* @return
*/
public String getLocation(){
return location;
}
/**
* Gibt die RoomItems zurück
* @return
*/
public ArrayList<RoomItem> getValueList(){
return valueList;
}
android:id="@+id/frame"
android:background="@color/layoutBackground"
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/overview_list"></android.support.v7.widget.RecyclerView>
<include
layout="@layout/loading_animation"
android:visibility="gone"
android:id="@+id/loading_animation" />
<android.support.v7.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardElevation="@dimen/cardViewElevation"
app:cardCornerRadius="@dimen/cardViewCornerRadius"
app:cardUseCompatPadding="true"
android:id="@+id/container">
</android.support.v7.widget.CardView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/recyclerItemHeight">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_centerInParent="true"
android:layout_margin="3dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/icon"
android:layout_gravity="center"
android:layout_weight="2"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/name"
android:layout_gravity="center"
android:textColor="@color/textColorDark"
android:gravity="center_vertical|center_horizontal"
android:layout_weight="3"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/value"
android:layout_gravity="center"
android:textColor="@color/textColorDark"
android:gravity="center_vertical|center_horizontal"
android:layout_weight="3"/>
</LinearLayout>
</RelativeLayout>
// Inflate the layout for this fragment
overview = inflater.inflate(R.layout.fragment_overview, container, false);
overviewArray = (RecyclerView) overview.findViewById(R.id.overview_list);
overviewArray.setHasFixedSize(true);
llm = new LinearLayoutManager(getContext());
llm.setOrientation(LinearLayoutManager.VERTICAL);
overviewArray.setLayoutManager(llm);
loadRoomData();
return overview;
/**
* Lädt die Sensoren des Raumes
*/
public void loadRoomData(){
overview.findViewById(R.id.loading_animation).setVisibility(View.VISIBLE);
final Map<String, String> requestData = new HashMap<>();
requestData.put("action", "getsensordata");
requestData.put("username", SaveData.getUsername(getContext()));
requestData.put("password", SaveData.getPassword(getContext()));
requestData.put("room", "all");
HTTPRequest.sendRequest(getContext(), requestData, SaveData.getServerIp(getContext()), new HTTPRequest.HTTPRequestCallback() {
@Override
public void onRequestResult(String result) {
overview.findViewById(R.id.loading_animation).setVisibility(View.GONE);
if(result.equals("wrongdata")){
Dialogs.fehlermeldung("Anmeldung nicht möglich!\nBitte logge dich erneut ein.", overview.findViewById(R.id.frame));
}
else if(result.equals("unknownuser")){
Dialogs.fehlermeldung("Dieser Benutzer existiert nicht.\nBitte logge dich erneut ein.", overview.findViewById(R.id.frame));
}
else{
try{
JSONObject jsonObject = null;
try{
jsonObject = new JSONObject(result);
}catch (JSONException e){
e.printStackTrace();
}
overviewItems = new ArrayList<>();
JSONArray overviewItemArray = jsonObject.getJSONArray("values");
for(int i = 0; i < overviewItemArray.length(); i++){
JSONObject o = overviewItemArray.getJSONObject(i);
ArrayList<RoomItem> valueList = new ArrayList<>();
JSONArray valueArray = o.getJSONArray("value_array");
for(int j = 0; j < valueArray.length(); j++){
JSONObject v = valueArray.getJSONObject(j);
valueList.add(new RoomItem(v.getString("shortform"), v.getString("id"),
v.getString("icon"), v.getString("device_type"), "sensor",
v.getString("wert"),
o.getString("location")));
}
overviewItems.add(new OverviewItem(o.getString("name"), o.getString("location"), valueList));
}
//Adapter setzen
overviewAdapter = new OverviewAdapter(overviewItems, getActivity(), getContext(),
overview.findViewById(R.id.frame));
overviewArray.setAdapter(overviewAdapter);
overviewAdapter.notifyDataSetChanged();
}catch (JSONException e){
e.printStackTrace();
}
}
}
@Override
public void onError(String msg) {
overview.findViewById(R.id.loading_animation).setVisibility(View.GONE);
Dialogs.fehlermeldung(msg, overview.findViewById(R.id.frame));
}
});
}
private int lastPosition = -1;
private ArrayList<OverviewItem> overviewItems;
private Activity activity;
private Context context;
private View view;
public OverviewAdapter(ArrayList<OverviewItem> overviewItems, Activity activity, Context context, View view){
this.overviewItems = overviewItems;
this.activity = activity;
this.context = context;
this.view = view;
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:id="@+id/container">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/title"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"/>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/value_list"></android.support.v7.widget.RecyclerView>
<include
layout="@layout/empty_item"
android:visibility="gone"
android:id="@+id/empty_item"/>
</LinearLayout>
public class HorizontalRoomAdapter extends RoomAdapter {
public HorizontalRoomAdapter(ArrayList<RoomItem> roomItems, Activity activity, Context context, View view){
super(roomItems, activity, context, view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int i){
final RoomItem ri = getRoomItems().get(i);
final SensorViewHolder sensorViewHolder = (SensorViewHolder) holder;
sensorViewHolder.icon.setImageResource(Icons.getDeviceIcon(ri.getIcon()));
sensorViewHolder.value.setText(ri.getValue());
sensorViewHolder.name.setText(ri.getName());
sensorViewHolder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RoomControl.showOverview(getActivity(), ri, ri.getRoom());
}
});
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType){
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.value_item_horizontal, viewGroup, false);
return new SensorViewHolder(itemView);
}
@Override
public int getItemViewType(int position){
return VIEW_TYPE_SENSOR;
}
}
/**
* Gibt die RoomItems zurück
* @return
*/
public ArrayList<RoomItem> getRoomItems(){
return roomItems;
}
/**
* Gibt die Activity zurück
* @return
*/
public Activity getActivity(){
return activity;
}
@Override
public int getItemCount(){
return overviewItems.size();
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int i){
if(holder instanceof OverviewHolder){
final OverviewItem oi = overviewItems.get(i);
final OverviewHolder overviewHolder = (OverviewHolder) holder;
overviewHolder.name.setText(oi.getName());
//Adapter setzen
RoomAdapter valueAdapter = new HorizontalRoomAdapter(oi.getValueList(), activity, context, view);
overviewHolder.valueArray.setAdapter(valueAdapter);
valueAdapter.notifyDataSetChanged();
if(oi.getValueList().isEmpty()){
overviewHolder.valueArray.setVisibility(View.GONE);
overviewHolder.container.findViewById(R.id.empty_item).setVisibility(View.VISIBLE);
((ImageView) overviewHolder.container.findViewById(R.id.empty_icon)).setImageResource(Icons.getRoomIcon(oi.getLocation()));
((TextView) overviewHolder.container.findViewById(R.id.empty_title)).setText("Raum leer");
((TextView) overviewHolder.container.findViewById(R.id.empty_info)).setText("Diesem Raum wurden noch keine Sensoren hinzugefügt.");
}
setAnimation(overviewHolder.container, i);
}
}
private void setAnimation(View viewToAnimate, int position){
if(position > lastPosition){
Animation animation = AnimationUtils.loadAnimation(context, R.anim.recycler_animation);
viewToAnimate.startAnimation(animation);
lastPosition = position;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType){
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.overview_item, viewGroup,false);
return new OverviewHolder(itemView);
}
public class OverviewHolder extends RecyclerView.ViewHolder{
protected TextView name;
protected RecyclerView valueArray;
protected View container;
public OverviewHolder(View v){
super(v);
container = v.findViewById(R.id.container);
name = (TextView) v.findViewById(R.id.title);
valueArray = (RecyclerView) v.findViewById(R.id.value_list);
valueArray.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(context);
llm.setOrientation(LinearLayoutManager.HORIZONTAL);
valueArray.setLayoutManager(llm);
}
}
Dieser Beitrag hat dir gefallen?
Dann abonniere doch unseren Newsletter!