Android RecyclerView Adaper没有膨胀我的布局?
我正在使用Android RecyclerView Adaper没有膨胀我的布局?,android,android-recyclerview,Android,Android Recyclerview,我正在使用RecyclerviewAdapter显示一些数据。这是我的第一次,我真的遇到了麻烦。在我的移动设备上,RecyclerView变为空 能否RecyclerView.Adapter使用图像膨胀视图 这是sensor_data_listitem.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="ht
Recyclerview
Adapter
显示一些数据。这是我的第一次,我真的遇到了麻烦。在我的移动设备上,RecyclerView
变为空
能否RecyclerView.Adapter
使用图像膨胀视图
这是sensor_data_listitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f3e5f5">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical">
<View
android:id="@+id/space1"
android:layout_width="match_parent"
android:layout_height="6dp"
android:layout_weight="1"
android:background="#ce93d8" />
<android.support.v7.widget.GridLayout
android:background="#f3e5f5"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:columnCount="3"
app:rowCount="5">
<ImageView
android:id="@+id/list_item_icon"
android:layout_width="0dp"
android:adjustViewBounds="true"
android:maxHeight="@dimen/farm_icon_height"
android:maxWidth="@dimen/farm_icon_width"
android:scaleType="fitCenter"
app:layout_columnWeight="1"
app:layout_gravity="fill_horizontal"
app:layout_rowSpan="5"
tools:src="@drawable/fish" />
<TextView
android:id="@+id/farm_name"
android:layout_width="0dp"
android:fontFamily="sans-serif-light"
android:gravity="center_horizontal"
android:textColor="@color/colorPrimary"
android:textSize="16sp"
app:layout_columnWeight="1"
app:layout_gravity="fill_horizontal"
tools:text="Fish Farm 1" />
<TextView
android:id="@+id/list_item_date"
android:layout_width="0dp"
android:fontFamily="sans-serif-light"
android:gravity="center_horizontal"
android:textColor="@color/colorPrimary"
android:textSize="16sp"
app:layout_columnWeight="1"
app:layout_gravity="fill_horizontal"
tools:text="Today 27, April" />
<include
layout="@layout/sensor_items_layout"
app:layout_columnWeight="1"
app:layout_columnSpan="2"
/>
</android.support.v7.widget.GridLayout>
<View
android:id="@+id/space2"
android:layout_width="match_parent"
android:layout_height="6dp"
android:layout_weight="1"
android:background="#ce93d8" />
</LinearLayout>
</LinearLayout>
include布局也很简单
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/oxygen_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxHeight="@dimen/dot_icon_width"
android:maxWidth="@dimen/dot_icon_width"
tools:src="@drawable/dot_icon" />
<TextView
android:id="@+id/oxygen_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-light"
android:textColor="@color/secondaryTextColor"
android:textSize="16sp"
android:text="DO" />
<TextView
android:id="@+id/oxygen_value"
android:paddingLeft="40dp"
android:layout_marginLeft="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-light"
android:textColor="@color/secondaryTextColor"
android:textSize="20sp"
android:text="10" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/temp_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxHeight="@dimen/dot_icon_width"
android:maxWidth="@dimen/dot_icon_width"
tools:src="@drawable/dot_icon" />
<TextView
android:id="@+id/temp_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-light"
android:textColor="@color/secondaryTextColor"
android:textSize="16sp"
android:text="Temp" />
<TextView
android:id="@+id/temp_value"
android:paddingLeft="20dp"
android:layout_marginLeft="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-light"
android:textColor="@color/secondaryTextColor"
android:textSize="20sp"
android:text="10" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/ph_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxHeight="@dimen/dot_icon_width"
android:maxWidth="@dimen/dot_icon_width"
tools:src="@drawable/dot_icon" />
<TextView
android:id="@+id/ph_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-light"
android:textColor="@color/secondaryTextColor"
android:textSize="16sp"
android:text="PH" />
<TextView
android:id="@+id/ph_value"
android:paddingLeft="40dp"
android:layout_marginLeft="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-light"
android:textColor="@color/secondaryTextColor"
android:textSize="20sp"
android:text="10" />
</LinearLayout>
</LinearLayout>
我的适配器代码是
package fishfarm.gebeya.fishfarm;
import android.database.Cursor;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import fishfarm.gebeya.fishfarm.data.FishFarmContract;
import fishfarm.gebeya.fishfarm.model.SensorData;
/**
* Created by Gere on 5/7/2017.
*/
public class FishFarmAdapter extends
RecyclerView.Adapter<FishFarmAdapter.FishFaemViewHolder>
{
private List<SensorData> mSensorDatas;
final private FishFarmAdapterClickListner mClickHandler;
final private View mEmptyView;
public FishFarmAdapter( List<SensorData> sensorDatas,
FishFarmAdapterClickListner
mClickHandler,
View mEmptyView) {
mSensorDatas = sensorDatas;
this.mClickHandler = mClickHandler;
this.mEmptyView = mEmptyView;
}
@Override
public FishFaemViewHolder onCreateViewHolder(ViewGroup
viewGroup,
int viewType) {
if (viewGroup instanceof RecyclerView) {
View view =
LayoutInflater.from(viewGroup.getContext()).inflate(
R.layout.sensor_data_list_card, viewGroup,
false);
view.setFocusable(true);
return new FishFaemViewHolder(view);
}
else {
throw new RuntimeException("Not bound to
RecyclerView");
}
}
@Override
public void onBindViewHolder(FishFaemViewHolder
fishFaemViewHolder,
int position) {
Log.i("ONBIND", String.valueOf(mSensorDatas.size()));
SensorData sensorData = mSensorDatas.get(position);
long SensorId = sensorData.getSensorID();
int defaultImage;
float Ph = sensorData.getPH();
fishFaemViewHolder.phView.setText(String.valueOf(Ph));
float temp = sensorData.getTemprature();
fishFaemViewHolder.tempView.setText(String.valueOf(temp));
float DO = sensorData.getOxygen();
fishFaemViewHolder.tempView.setText(String.valueOf(DO));
long date = sensorData.getDate();
fishFaemViewHolder.mDateView.setText(String.valueOf(date));
// ViewCompat.setTransitionName(
//fishFaemViewHolder.mIconView, "iconView" +
position);
}
@Override
public int getItemCount() {
Log.i("COUNT", String.valueOf(mSensorDatas.size()));
if ( null == mSensorDatas) return 0;
return mSensorDatas.size();
}
public void swapList(List<SensorData> newSensorDatas) {
mSensorDatas = newSensorDatas;
notifyDataSetChanged();
mEmptyView.setVisibility(getItemCount() == 0 ?
View.VISIBLE : View.GONE);
}
public List<SensorData> getList() {
return mSensorDatas;
}
public class FishFaemViewHolder extends
RecyclerView.ViewHolder
implements View.OnClickListener {
// public final ImageView mIconView;
public final TextView mDateView;
public final TextView tempView;
public final TextView phView;
public FishFaemViewHolder(View itemView) {
super(itemView);
// mIconView = (ImageView)
itemView.findViewById(R.id.list_item_icon);
mDateView = (TextView)
itemView.findViewById(R.id.list_item_date);
tempView = (TextView)
itemView.findViewById(R.id.temp_value);
phView = (TextView)
itemView.findViewById(R.id.ph_value);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int adapterPosition = getAdapterPosition();
SensorData sensorData =
mSensorDatas.get(adapterPosition);
mClickHandler.onClick(sensorData,
this);
}
}
public static interface FishFarmAdapterClickListner {
void onClick(SensorData date, FishFaemViewHolder vh);
}
}
public class SensorDataViewActivity extends
AppCompatActivity
{
FishFarmDataSource dataSource;
RecyclerView mRecyclerView;
private FishFarmAdapter mFishFarmAdapter;
private View emptyText;
private static final int PERCENTAGE_TO_ANIMATE_AVATAR = 20;
private boolean mIsAvatarShown = true;
private ImageView mProfileImage;
private int mMaxScrollSize;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.farm_farm_data);
initData();
}
private void initData() {
List<SensorData> sensorDataList = new ArrayList<>();
for (int i=0; i<10; i++)
{
SensorData sensorData = new SensorData();
sensorData.setSensorID(1);
sensorData.setOxygen(15);
sensorData.setPH(1);
sensorData.setTemprature(15);
sensorData.setDescribition("hhhhhhsdsahfksflsdfdsfdskjfsdfj" +
" fsdfdsfk");
sensorData.setConductivity("high");
sensorData.setFeeding("Good");
sensorData.setDate(13444);
SensorLocation sensorLocation = new
SensorLocation();
sensorLocation.setLocation_name("#code1234");
sensorData.setFarmLocation(sensorLocation);
sensorDataList.add(sensorData);
}
mRecyclerView = (RecyclerView)
findViewById(R.id.list_fish_farm);
mRecyclerView.setLayoutManager(new
LinearLayoutManager(this));
emptyText = findViewById(R.id.text_empty);
mRecyclerView.setHasFixedSize(true);
mFishFarmAdapter = new FishFarmAdapter(sensorDataList,
new FishFarmAdapter.FishFarmAdapterClickListner() {
@Override
public void onClick(SensorData date,
FishFarmAdapter.FishFaemViewHolder vh) {
}
},emptyText);
mRecyclerView.setAdapter(mFishFarmAdapter);
}
package fishfarm.gebeya.fishfarm;
导入android.database.Cursor;
导入android.support.v7.widget.RecyclerView;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
导入java.util.List;
导入fishfarm.gebeya.fishfarm.data.FishFarmContract;
导入fishfarm.gebeya.fishfarm.model.SensorData;
/**
*由Gere于2017年5月7日创建。
*/
公共类FishFarmAdapter扩展
RecyclerView.适配器
{
私有列表传感器数据;
最终私有FishFarmAdapterClickListner McClickHandler;
最终私有视图mEmptyView;
公共FishFarmAdapter(列出传感器数据、,
FishFarmAdapterClickListner
麦克利克汉德勒,
视图(mEmptyView){
mSensorDatas=传感器数据;
this.mClickHandler=mClickHandler;
this.mEmptyView=mEmptyView;
}
@凌驾
public FishFaemViewHolder onCreateViewHolder(视图组
查看组,
int视图类型){
if(回收视图的视图组实例){
视图=
LayoutInflater.from(viewGroup.getContext()).flate(
R.layout.sensor\u data\u list\u卡、视图组、,
假);
view.setFocusable(true);
返回新的FishFaemViewHolder(视图);
}
否则{
抛出新的RuntimeException(“未绑定到
回收视图);
}
}
@凌驾
BindViewHolder上的公共无效(FishFaemViewHolder
fishFaemViewHolder,
内部位置){
Log.i(“ONBIND”,String.valueOf(mSensorDatas.size());
SensorData SensorData=mSensorDatas.get(位置);
long SensorId=sensorData.getSensorID();
int-defaultImage;
float Ph=传感器数据。getPH();
fishFaemViewHolder.phView.setText(String.valueOf(Ph));
浮点温度=传感器数据。GetTemperature();
fishFaemViewHolder.tempView.setText(String.valueOf(temp));
float DO=sensorData.getOxygen();
fishFaemViewHolder.tempView.setText(String.valueOf(DO));
long date=sensorData.getDate();
fishFaemViewHolder.mDateView.setText(String.valueOf(date));
//ViewCompat.setTransitionName(
//fishFaemViewHolder.mIconView,“iconView”+
职位);
}
@凌驾
public int getItemCount(){
Log.i(“COUNT”,String.valueOf(mSensorDatas.size());
if(null==mSensorDatas)返回0;
返回mSensorDatas.size();
}
公共无效交换列表(列出新传感器数据){
mSensorDatas=newSensorDatas;
notifyDataSetChanged();
mEmptyView.setVisibility(getItemCount()==0?
View.VISIBLE:View.GONE);
}
公共列表getList(){
返回传感器数据;
}
公共类FishFaemViewHolder扩展
RecyclerView.ViewHolder
实现View.OnClickListener{
//公共最终图像视图mIconView;
公共最终文本视图mDateView;
公共最终文本视图临时视图;
公共最终文本视图;
公共FishFaemViewHolder(查看项目视图){
超级(项目视图);
//mIconView=(图像视图)
itemView.findViewById(R.id.list\u item\u图标);
mDateView=(文本视图)
itemView.findViewById(R.id.list\u item\u date);
tempView=(TextView)
itemView.findViewById(R.id.temp_值);
phView=(TextView)
itemView.findViewById(R.id.ph_值);
setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
int adapterPo