我正在尝试向我的应用程序添加新的卡片 View /新卡片(对不起,我是新手)。现在,一切正常,但我该如何添加更多?我还想知道如何在 FAB click 上执行此操作。这是我的代码
public class WeatherListAdapter extends RecyclerView.Adapter<WeatherListAdapter.ViewHolder>{
private List<WeatherData> weatherDataList;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//?
View view1 = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_weather_card,parent,false);
View view2 = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_weather_card,parent,false);
return new ViewHolder(view2);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
WeatherData weatherData = this.weatherDataList.get(position);
holder.locationTextView.setText(weatherData.getName());
holder.tempTextView.setText("Temperature: "+weatherData.getWeatherDetails().getTemperature());
holder.humidTextView.setText("Humidity: "+ weatherData.getWeatherDetails().getHumidity());
}
@Override
public int getItemCount() {
return this.weatherDataList.size();
}
protected static class ViewHolder extends RecyclerView.ViewHolder{
public TextView locationTextView;
public TextView tempTextView;
public TextView humidTextView;
public ViewHolder(View v){
super(v);
locationTextView = (TextView) v.findViewById(R.id.locationTextView);
tempTextView = (TextView) v.findViewById(R.id.tempTextView);
humidTextView= (TextView) v.findViewById(R.id.humidText);
}
}
public WeatherListAdapter(List<WeatherData> weatherDataList){
this.weatherDataList = weatherDataList;
}
}
如果我需要添加更多内容来帮助您解决问题,请发表评论。谢谢! WeatherListActivity-
private RecyclerView recyclerView;
List<WeatherData> mWeatherDataList;
WeatherListAdapter mAdpapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_weather_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
mWeatherDataList = new ArrayList<WeatherData>();
final WeatherApiManager weatherApiManager = new WeatherApiManager();
weatherApiManager.getWeatherByCoordinate(35.744644099999995, -78.86395929999999, new WeatherCallback() {
@Override
public void weatherDownloadCompleted(boolean success, WeatherData weatherData) {
List<WeatherData> weatherDataList = new ArrayList<WeatherData>();
// weatherDataList.add(weatherData);
// weatherDataList.add(weatherData);
mAdpapter = new WeatherListAdapter(weatherDataList);
//why does this have to be in here?
recyclerView.setAdapter(mAdpapter);
}
});
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final WeatherApiManager weatherApiManager = new WeatherApiManager();
weatherApiManager.getWeatherByCoordinate(35.744644099999995, -78.86395929999999, new WeatherCallback() {
@Override
public void weatherDownloadCompleted(boolean success, WeatherData weatherData) {
List<WeatherData> weatherDataList = new ArrayList<WeatherData>();
weatherDataList.add(weatherData);
mAdpapter = new WeatherListAdapter(weatherDataList);
//why does this have to be in here?
recyclerView.setAdapter(mAdpapter);
}
});
updateUI();
}
});
}
最佳答案
为了在您的 RecyclerView 中使用 CardView(然后附加您之前拥有的 TextView),我会这样做:
public class WeatherListAdapter extends RecyclerView.Adapter<WeatherListAdapter.ViewHolder>{
private List<WeatherData> weatherDataList;
public TextView locationTextView;
public TextView tempTextView;
public TextView humidTextView;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Here we are inflating the CardView
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_weather_card, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
WeatherData weatherData = this.weatherDataList.get(position);
CardView cardView = holder.cardView;
// We then add these items to each CardView
locationTextView = (TextView) cardView.findViewById(R.id.locationTextView);
tempTextView = (TextView) cardView.findViewById(R.id.tempTextView);
humidTextView= (TextView) cardView.findViewById(R.id.humidText);
locationTextView.setText(weatherData.getName());
tempTextView.setText("Temperature: "+weatherData.getWeatherDetails().getTemperature());
humidTextView.setText("Humidity: "+ weatherData.getWeatherDetails().getHumidity());
}
@Override
public int getItemCount() {
return this.weatherDataList.size();
}
protected static class ViewHolder extends RecyclerView.ViewHolder{
public CardView cardView;
public ViewHolder(View v){
super(v);
// Each ViewHolder only has a CardView (even though that CardView has child TextViews
cardView = (CardView) v;
}
}
public WeatherListAdapter(List<WeatherData> weatherDataList){
this.weatherDataList = weatherDataList;
}
}
然后你只需要确保 adapter_weather_card.xml
在你的布局中有 <TextView>
locationTextView
的项目, tempTextView
和 humidTextView
因此它们都可以显示在每个 CardView 上。
使用此 WeatherListAdapter 的示例 Activity
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
WeatherListAdapter mAdapter;
List<WeatherData> mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mList = new ArrayList<>();
// Just a bunch of sample data we're using to populate the RecyclerView
mList.add(new WeatherData("Sacramento", "88", "60"));
mList.add(new WeatherData("Dallas", "96", "40"));
mList.add(new WeatherData("Orlando", "80", "85"));
mList.add(new WeatherData("Seattle", "68", "78"));
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
// In your WeatherListAdapater class you pass a List to the constructor, this is the
// list that contains all the WeatherData and the list we use to add new CardViews.
mAdapter = new WeatherListAdapter(mList);
mRecyclerView.setAdapter(mAdapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Adding a new item to our WeatherData list with the FAB
// This item will become a new CardView
// We can similarly remove CardViews by calling remove()
mList.add(new WeatherData("Boston", "67", "50"));
// Updating the UI after adding the CardView so it shows up
updateUI();
}
});
}
private void updateUI() {
// The list we passed to the mAdapter was changed so we have to notify it in order to update
mAdapter.notifyDataSetChanged();
}
}
此 Activity 的示例 XML
<?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="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="20dp">
</android.support.v7.widget.RecyclerView>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_menu_add"/>
</RelativeLayout>
示例 CardView XML
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="150dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_margin="10dp"
app:cardBackgroundColor="@android:color/holo_blue_light">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/locationTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tempTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/humidText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</android.support.v7.widget.CardView>
关于java - 我如何创建一个新的 CardView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36972480/