Java 如何将RecyclerView添加到父活动中的约束布局?
我有一个基本导航活动。它由一个包含回收器视图的主页活动扩展。我正在尝试将回收器视图添加到基本导航活动中定义的约束布局中。recycler视图的数据来自firebase数据库。但是,我不知道如何将回收器视图添加到约束布局中 recycler视图适用于没有导航栏的活动。因此我想问题不在于检索数据。但是当Homepage活动扩展BaseNav活动时,不会显示任何结果 基本导航活动:Java 如何将RecyclerView添加到父活动中的约束布局?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有一个基本导航活动。它由一个包含回收器视图的主页活动扩展。我正在尝试将回收器视图添加到基本导航活动中定义的约束布局中。recycler视图的数据来自firebase数据库。但是,我不知道如何将回收器视图添加到约束布局中 recycler视图适用于没有导航栏的活动。因此我想问题不在于检索数据。但是当Homepage活动扩展BaseNav活动时,不会显示任何结果 基本导航活动: public class BaseNavActivity extends AppCompatActivity i
public class BaseNavActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
ConstraintLayout constraintLayout;
protected void onCreateDrawer(Bundle savedInstanceState) {
setContentView(R.layout.activity_base_nav);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
constraintLayout = findViewById(R.id.constraint_layout_nav_bar);
}
public class Homepage extends BaseNavActivity {
RecyclerView allEventsRecyclerView;
EventListAdapter eventListAdapter;
View contentView;
LayoutInflater inflater;
ArrayList<EventDetails> returnArrayList;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
ChildEventListener childEventListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.onCreateDrawer(savedInstanceState);
inflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
contentView = inflater.inflate(R.layout.activity_homepage, allEventsRecyclerView,false);
constraintLayout.addView(contentView,0);
allEventsRecyclerView = findViewById(R.id.homepageRecyclerView);
allEventsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
returnArrayList = new ArrayList<>();
eventListAdapter = new EventListAdapter(this,returnArrayList);
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference().child("AE").child("someplace");
childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
returnArrayList.add(dataSnapshot.getValue(EventDetails.class));
eventListAdapter.notifyDataSetChanged();
allEventsRecyclerView.setAdapter(eventListAdapter);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
databaseReference.addChildEventListener(childEventListener);
}
}
主页活动:
public class Homepage extends BaseNavActivity {
RecyclerView allEventsRecyclerView;
EventListAdapter eventListAdapter;
View contentView;
LayoutInflater inflater;
ArrayList<EventDetails> returnArrayList;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
ChildEventListener childEventListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.onCreateDrawer(savedInstanceState);
inflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
contentView = inflater.inflate(R.layout.activity_homepage, allEventsRecyclerView,false);
constraintLayout.addView(contentView,0);
allEventsRecyclerView = findViewById(R.id.homepageRecyclerView);
allEventsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
returnArrayList = new ArrayList<>();
eventListAdapter = new EventListAdapter(this,returnArrayList);
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference().child("AE").child("someplace");
childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
returnArrayList.add(dataSnapshot.getValue(EventDetails.class));
eventListAdapter.notifyDataSetChanged();
allEventsRecyclerView.setAdapter(eventListAdapter);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
databaseReference.addChildEventListener(childEventListener);
}
}
公共类主页扩展BaseNavActivity{
RecyclerView allEventsRecyclerView;
EventListAdapter事件列表适配器;
视图内容视图;
充气机;
ArrayList返回ArrayList;
FirebaseDatabase FirebaseDatabase;
数据库参考数据库参考;
ChildEventListener ChildEventListener;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
super.onCreateDrawer(savedInstanceState);
充气器=(充气器)此
.getSystemService(上下文布局\充气机\服务);
contentView=充气机。充气(R.layout.activity\u主页,allEventsRecyclerView,false);
constraintLayout.addView(contentView,0);
allEventsRecyclerView=findViewById(R.id.homepageRecyclerView);
allEventsRecyclerView.setLayoutManager(新的LinearLayoutManager(此));
returnArrayList=新建ArrayList();
eventListAdapter=新的eventListAdapter(此为returnArrayList);
firebaseDatabase=firebaseDatabase.getInstance();
databaseReference=firebaseDatabase.getReference().child(“AE”).child(“某处”);
childEventListener=新的childEventListener(){
@凌驾
公共void onChildaded(@NonNull DataSnapshot DataSnapshot,@null字符串s){
添加(dataSnapshot.getValue(EventDetails.class));
eventListAdapter.notifyDataSetChanged();
allEventsRecyclerView.setAdapter(eventListAdapter);
}
@凌驾
public void onChildChanged(@NonNull DataSnapshot DataSnapshot,@null字符串s){
}
@凌驾
公共void onChildRemoved(@NonNull DataSnapshot DataSnapshot){
}
@凌驾
public void onChildMoved(@NonNull DataSnapshot DataSnapshot,@null字符串s){
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
};
databaseReference.addChildEventListener(childEventListener);
}
}
activity_homepage.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="match_parent"
tools:context=".Homepage">
<android.support.v7.widget.RecyclerView
android:id="@+id/homepageRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
activity_base_nav.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_base_nav"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_base_nav"
app:menu="@menu/activity_base_nav_drawer" />
</android.support.v4.widget.DrawerLayout>
我需要回收器视图与导航栏一起出现在屏幕上。
我怎样才能做到这一点呢?请为activity\u base\u nav.xml和activity\u homepage.xml添加代码。添加资源文件我可以要求app\u bar\u base\u nav.xml,但我认为最终的解决方案是只添加RecyclerView(你不需要膨胀,只需使用
新的RecyclerView(HomepageActivity.this)
)导航栏的父视图组(我认为是ConstraintLayout)。如果以编程方式添加aView,则始终必须提供类似LayoutParams的内容。请添加activity\u base\u nav.xml和activity\u homepage.xml的代码。添加资源文件我可以请求app\u bar\u base\u nav.xml,但我认为最终的解决方案是只添加RecyclerView(你不需要膨胀,只需使用新的RecyclerView(HomepageActivity.this)
)导航栏的父视图组(我认为是ConstraintLayout)。如果以编程方式添加aView,则始终必须提供类似LayoutParams的内容。为ConstraintLayout绘制如何执行此操作的草图