我正在尝试添加新的卡片视图/新卡片(对不起,我是新的)到我的应用程序。现在,一切正常,但我会如何添加更多?我还想知道如何在FAB点击上做到这一点。这是我的代码
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();
}
});
}
答案 0 :(得分:2)
为了在您的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
的{{1}}个项目,以便他们都可以显示在每个CardView上。
使用此WeatherListAdapter的示例活动
humidTextView
此活动的示例XML
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();
}
}
示例CardView 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>
答案 1 :(得分:0)
可以使用XML布局文件中的CardView
小部件添加简单的卡片视图。这是一个实现的例子:
<!-- Root element of the XML Layout file -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
... >
<!-- A CardView that contains a TextView -->
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="200dp"
android:layout_height="200dp"
card_view:cardCornerRadius="4dp">
<!-- Here goes the content of the card -->
<TextView
android:id="@+id/info_text"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v7.widget.CardView>
</LinearLayout>
如果您还没有使用SDK管理器,您还必须下载Android支持库(您可以在可下载列表底部的&#39; Extras&#39;目录中找到它们) content)然后在Gradle配置中添加依赖项:
dependencies {
...
compile 'com.android.support:cardview-v7:21.0.+'
}