27.12.2016
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:padding="5dp">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="@dimen/cardViewElevation"
app:cardUseCompatPadding="true"
android:id="@+id/container">
<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:weightSum="8"
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"/>
<Switch
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/switch_view"
android:layout_gravity="center"
android:layout_weight="3"/>
</LinearLayout>
</RelativeLayout>
</android.support.v7.widget.CardView>
</RelativeLayout>
public class RoomAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
final int VIEW_TYPE_SWITCH = 0;
final int VIEW_TYPE_SENSOR = 1;
final int VIEW_TYPE_HEATING = 2;
final int VIEW_TYPE_SCENE = 3;
int lastPosition = -1;
@Override
public int getItemCount(){
return roomItems.size();
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int i){
if(holder instanceof SwitchViewHolder){
final RoomItem ri = roomItems.get(i);
final SwitchViewHolder switchViewHolder = (SwitchViewHolder) holder;
switchViewHolder.name.setText(ri.getName());
switchViewHolder.icon.setImageResource(Icons.getDeviceIcon(ri.getDevice()));
setState = true;
switchViewHolder.switchView.setChecked(ri.getValue().equals("true"));
setState = false;
switchViewHolder.switchView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(!setState){
setState = true;
switchViewHolder.switchView.setChecked(!switchViewHolder.switchView.isChecked());
setState = false;
}
}
});
switchViewHolder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setState = true;
setModes(ri.getDevice(), !switchViewHolder.switchView.isChecked());
switchViewHolder.switchView.setChecked(!switchViewHolder.switchView.isChecked());
setState = false;
}
});
setAnimation(((SwitchViewHolder) holder).container, i);
}
else if(holder instanceof SensorViewHolder){
final RoomItem ri = roomItems.get(i);
final SensorViewHolder sensorViewHolder = (SensorViewHolder) holder;
sensorViewHolder.icon.setImageResource(Icons.getValueIcon(ri.getDevice()));
sensorViewHolder.value.setText(ri.getValue());
sensorViewHolder.name.setText(ri.getName());
sensorViewHolder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showOverview(ri.getDevice());
}
});
}
else if(holder instanceof HeatingViewHolder){
final RoomItem ri = roomItems.get(i);
final HeatingViewHolder heatingViewHolder = (HeatingViewHolder) holder;
heatingViewHolder.icon.setImageResource(Icons.getDeviceIcon(ri.getDevice()));
heatingViewHolder.value.setText(ri.getValue());
heatingViewHolder.name.setText(ri.getName());
heatingViewHolder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openHeatingDialog();
}
});
}
else if(holder instanceof SceneViewHolder){
final RoomItem ri = roomItems.get(i);
final SceneViewHolder sceneViewHolder = (SceneViewHolder) holder;
sceneViewHolder.icon.setImageResource(Icons.getSystemInfoIcon(ri.getName()));
sceneViewHolder.name.setText(ri.getName());
sceneViewHolder.container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openSceneMenu();
}
});
}
}
public void setAnimation(View viewToAnimate, int position){
if(position > lastPosition){
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.recycler_animation);
viewToAnimate.startAnimation(animation);
lastPosition = position;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType){
View itemView;
switch(viewType){
case VIEW_TYPE_SWITCH:
itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.switch_item, viewGroup, false);
return new SwitchViewHolder(itemView);
case VIEW_TYPE_HEATING:
itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.value_item, viewGroup, false);
return new HeatingViewHolder(itemView);
case VIEW_TYPE_SCENE:
itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.value_item, viewGroup, false);
return new SceneViewHolder(itemView);
case VIEW_TYPE_SENSOR:
itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.value_item, viewGroup, false);
return new SensorViewHolder(itemView);
}
return null;
}
@Override
public int getItemViewType(int position){
if(roomItems.get(position).type.equals("switch")){
return VIEW_TYPE_SWITCH;
}
else if(roomItems.get(position).type.equals("sensor")){
return VIEW_TYPE_SENSOR;
}
else if(roomItems.get(position).type.equals("scene")){
return VIEW_TYPE_SCENE;
}
else if(roomItems.get(position).type.equals("heating")){
return VIEW_TYPE_HEATING;
}
return VIEW_TYPE_SENSOR;
}
public class SwitchViewHolder extends RecyclerView.ViewHolder{
protected TextView name;
protected ImageView icon;
protected Switch switchView;
protected View container;
public SwitchViewHolder(View v){
super(v);
container = v.findViewById(R.id.container);
name = (TextView) v.findViewById(R.id.name);
icon = (ImageView) v.findViewById(R.id.icon);
switchView = (Switch) v.findViewById(R.id.switch_view);
}
}
public class SensorViewHolder extends RecyclerView.ViewHolder{
protected TextView value, name;
protected ImageView icon;
protected View container;
public SensorViewHolder(View v){
super(v);
container = v.findViewById(R.id.container);
value = (TextView) v.findViewById(R.id.value);
name = (TextView) v.findViewById(R.id.name);
icon = (ImageView) v.findViewById(R.id.icon);
}
}
public class HeatingViewHolder extends RecyclerView.ViewHolder{
protected TextView value, name;
protected ImageView icon;
protected View container;
public HeatingViewHolder(View v){
super(v);
container = v.findViewById(R.id.container);
value = (TextView) v.findViewById(R.id.value);
name = (TextView) v.findViewById(R.id.name);
icon = (ImageView) v.findViewById(R.id.icon);
}
}
public class SceneViewHolder extends RecyclerView.ViewHolder{
protected TextView name;
protected ImageView icon;
protected View container;
public SceneViewHolder(View v){
super(v);
container = v.findViewById(R.id.container);
name = (TextView) v.findViewById(R.id.name);
v.findViewById(R.id.value).setVisibility(View.GONE);
icon = (ImageView) v.findViewById(R.id.icon);
}
}
}
/**
* Schaltet das Gerät device auf den Zustand mode
* @param device
* @param mode
*/
public void setModes(String device, boolean mode){
}
/**
* Zeigt Graphen für den Sensor sensor an
* @param sensor
*/
public void showOverview(String sensor){}
/**
* Heizungs-Menü öffnen
*/
public void openHeatingDialog(){}
/**
* Szenen-Menü öffnen
*/
public void openSceneMenu(){}
Dieser Beitrag hat dir gefallen?
Dann abonniere doch unseren Newsletter!