I have looked at a few similar incidents of this on StackOverflow. However none seem to apply to my case. The issue I'm having is that my RecyclerView is working but nothing is displaying. I have run multiple tests to try and figure out why it isn't working but all have just supported the fact that it is working correctly.
The log in getItemCount returns 3, which is the correct number. I just don't understand why it is not showing. I looked back at a recycler view I did in a previous activity and they both match to an extent(Other recycler has more information to set).
Thank you for any help you can provide.
Edit: I found the issue, but still need help. It was the collapsing toolbar that was causing it. If I move the RecyclerView outside the NestedScrollView I can see the items. However The content does not move correctly like the commented out TextViews do in the activity_project_detail.xml. I guess my new question is how do I get a RecyclerView to work inside a NestedScrollView. Thanks you!
ProjectDetailsActivity.java
package com.austinerck.projectpanda.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import com.austinerck.projectpanda.R;
import com.austinerck.projectpanda.adapter.TaskAdapter;
import com.austinerck.projectpanda.data.LocalDatabase;
import com.austinerck.projectpanda.data.Project;
import com.austinerck.projectpanda.data.Task;
import java.util.ArrayList;
public class ProjectDetailsActivity extends AppCompatActivity {
private boolean connectionState;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_project_details);
//Sets toolbar and up navigation
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//Gets the connection state from the intent
connectionState = getIntent().getExtras().getBoolean(LocalDatabase.CONNECTION_STATE);
//Gets the projects from the intent
Project project = getIntent().getExtras().getParcelable(LocalDatabase.PROJECT_DETAILS);
//Sets activity title
setTitle(project.getTitle());
//Generates Task arrays
ArrayList<Task> tasksUncompleted = Task.getUncompletedTasks(project.getTasks());
ArrayList<Task> tasksCompleted = Task.getCompletedTasks(project.getTasks());
//TODO: Fix recycler views
RecyclerView recyclerUncompleted = (RecyclerView) findViewById(R.id.detail_uncompleted);
recyclerUncompleted.setLayoutManager(new LinearLayoutManager(this));
recyclerUncompleted.setAdapter(new TaskAdapter(tasksUncompleted));
registerForContextMenu(recyclerUncompleted);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_projects_list, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
TaskAdapter.java
package com.austinerck.projectpanda.adapter;
import android.app.Activity;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.austinerck.projectpanda.R;
import com.austinerck.projectpanda.data.LocalDatabase;
import com.austinerck.projectpanda.data.Project;
import com.austinerck.projectpanda.data.ProjectCardView;
import com.austinerck.projectpanda.data.Task;
import com.austinerck.projectpanda.data.TaskView;
import java.util.ArrayList;
public class TaskAdapter extends RecyclerView.Adapter {
private ArrayList<Task> tasks;
public TaskAdapter(ArrayList<Task> tasks) {
this.tasks = tasks;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//Selects the layout used in the Recycler
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_task, parent, false);
return new TaskView(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
TaskView view = (TaskView) holder;
//Gets the views that need to be changed
view.getTitle().setText(tasks.get(position).getTitle());
view.getSubtitle().setText(tasks.get(position).getSubtitle());
view.getCheckbox().setChecked(tasks.get(position).isCompleted());
}
@Override
public int getItemCount() {
Log.e(LocalDatabase.LOG_TAG, "GetItemCount: " + tasks.size());
return tasks.size();
}
}
TaskView.java
package com.austinerck.projectpanda.data;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import com.austinerck.projectpanda.R;
import com.austinerck.projectpanda.activity.ProjectDetailsActivity;
import com.austinerck.projectpanda.activity.ProjectsListActivity;
import com.austinerck.projectpanda.activity.WelcomeActivity;
public class TaskView extends RecyclerView.ViewHolder {
private View view;
private TextView title, subtitle;
private CheckBox checkbox;
public TaskView(View view) {
super(view);
//Gets the different parts of a layout
this.view = view;
this.title = (TextView) view.findViewById(R.id.task_title);
this.subtitle = (TextView) view.findViewById(R.id.task_subtitle);
this.checkbox = (CheckBox) view.findViewById(R.id.task_checkbox);
}
public View getView() {
return view;
}
public TextView getTitle() {
return title;
}
public TextView getSubtitle() {
return subtitle;
}
public CheckBox getCheckbox() {
return checkbox;
}
}
activity_project_details.xml
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="192dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_collapsing"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp">
<ImageView
android:id="@+id/detail_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="fill_vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!--<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/detail_header_height"
android:paddingLeft="@dimen/spacing_m"
android:gravity="center_vertical"
android:text="@string/details_uncomp"
android:textSize="@dimen/text_body"
android:textColor="@color/text_subheader"/>-->
<android.support.v7.widget.RecyclerView
android:id="@+id/detail_uncompleted"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!--<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/detail_header_height"
android:paddingLeft="@dimen/spacing_m"
android:gravity="center_vertical"
android:text="@string/details_comp"
android:textSize="@dimen/text_body"
android:textColor="@color/text_subheader"/>-->
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
fragment_task.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/spacing_xxl"
android:paddingLeft="@dimen/spacing_m"
android:paddingRight="@dimen/spacing_m"
android:gravity="center_vertical">
<CheckBox
android:id="@+id/task_checkbox"
android:layout_width="@dimen/spacing_l"
android:layout_height="@dimen/spacing_l" />
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/spacing_xl">
<TextView
android:id="@+id/task_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Set Austin on fire"
android:textSize="@dimen/text_subheading"
android:textColor="@color/text"/>
<TextView
android:id="@+id/task_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Light Austin on fire using a Zippo"
android:textSize="@dimen/text_body"
android:textColor="@color/text_subheader"/>
</LinearLayout>
</LinearLayout>
Add this property to the NestedScrollView:
android:fillViewport="true"