Java Android studio RecyclerView错误,未显示任何内容(22小时前收到提交,工作正常)
我做了一些破坏我的计划的事。它在22小时前对我的最新承诺起了作用。 我正在使用recylerview从登录用户获取数据。我甚至看不到recylerview在我的页面上了。我怎样才能恢复到22小时前在android studio中的最新提交。我尝试了所有我不懂的事情。我今天甚至没碰那个活动,但2小时前它停止了工作 我所做的唯一一件事是重构用于编辑注释的名为custom_layout的视图,但后来我回复说,可能有东西保存在某个地方,导致了错误 以下是我的观点: 观众<代码>在此处输入代码 包com.example.examapplication.ViewHolderJava Android studio RecyclerView错误,未显示任何内容(22小时前收到提交,工作正常),java,android,android-studio,github,firebase-realtime-database,Java,Android,Android Studio,Github,Firebase Realtime Database,我做了一些破坏我的计划的事。它在22小时前对我的最新承诺起了作用。 我正在使用recylerview从登录用户获取数据。我甚至看不到recylerview在我的页面上了。我怎样才能恢复到22小时前在android studio中的最新提交。我尝试了所有我不懂的事情。我今天甚至没碰那个活动,但2小时前它停止了工作 我所做的唯一一件事是重构用于编辑注释的名为custom_layout的视图,但后来我回复说,可能有东西保存在某个地方,导致了错误 以下是我的观点: 观众在此处输入代码 包com.exam
public class NoteViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener {
public TextView text_title, text_content;
public NoteViewHolder(@NonNull View itemView){
super (itemView);
text_title = itemView.findViewById(R.id.text_title);
text_content = itemView.findViewById(R.id.text_content);
itemView.setOnCreateContextMenuListener(this); // context to this view
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { // on clik update delete on every object
// menu.setHeaderTitle("Select desired option");
menu.add(0,0,getAdapterPosition(),"Edit Note");
menu.add(0,0,getAdapterPosition(),"Delete Note");
}
}
主要活动
在这里输入代码
包com.example.examapplication
public class HomeActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private FloatingActionButton addNotePageButton;
private FirebaseAuth firebaseAuth;
FirebaseDatabase database;
DatabaseReference notesDb;
FirebaseRecyclerOptions<NotesList> options;
FirebaseRecyclerAdapter<NotesList, NoteViewHolder> adapter; // adapter
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//iniate
viewSetUp();
// refrense
notesDb = database.getReference("NoteList").child(firebaseAuth.getCurrentUser().getUid());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager( new LinearLayoutManager(this) );
showEachRow(); // call function
// buton to add note
addNotePageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(HomeActivity.this, NoteInputActivity.class);
startActivity(intent);
}
});
}
//Region -used for edit and delete this section start reads whats in the post and open ups a window on the same window based on the Viewholder and a xml file called custom_layout
// recycler view in this section and only the verifed logged in user can See his own data!
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) { // viewholder
if (item.getTitle().equals("Edit Note")){
showUpdateDialog(adapter.getRef(item.getOrder()).getKey(),adapter.getItem(item.getOrder()));
} else if (item.getTitle().equals("Delete Note")){
deleteNote(adapter.getRef(item.getOrder()).getKey());
}
return super.onContextItemSelected(item);
}
private void deleteNote(String adapter) { // delete
notesDb.child(adapter).removeValue();
}
private void showUpdateDialog(final String key, NotesList item) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("[ Note Edit Mode]");
builder.setMessage("Please update the desired fields");
View update_layout = LayoutInflater.from(this).inflate(R.layout.custom_layout,null); // view model layou
final EditText changed_title = update_layout.findViewById(R.id.edit_update_title);
final EditText changed_content = update_layout.findViewById(R.id.edit_update_text);
changed_title.setText(item.getTitle()); // get value to new
changed_content.setText(item.getText());
builder.setView(update_layout);
builder.setPositiveButton("Save changes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String title = changed_title.getText().toString();
String content = changed_content.getText().toString();
NotesList notesList = new NotesList(title,content);
notesDb.child(key).setValue(notesList);
Toast.makeText(HomeActivity.this,"Note Updated", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.show();
}
//# EndRegion
// Region to read data from dataBase using Viewholder and model Notes and a xml file called note_each_row + the home xml file.
private void showEachRow(){ // recycler view
options = new FirebaseRecyclerOptions.Builder<NotesList>()
.setQuery(notesDb,NotesList.class)
.build();
adapter = new FirebaseRecyclerAdapter<NotesList, NoteViewHolder>(options) { // noteViewModel to model to get
@Override
protected void onBindViewHolder(@NonNull NoteViewHolder holder, int position, @NonNull NotesList model) {
holder.text_title.setText(model.getTitle());
holder.text_content.setText(model.getText());
}
@NonNull
@Override
public NoteViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.notes_each_row,viewGroup,false); // inflate the rows
return new NoteViewHolder(itemView);
}
};
recyclerView.setAdapter(adapter);
}
//# end Region
//#start region initate to xml
private void viewSetUp(){
recyclerView = findViewById(R.id.recyclerView);
addNotePageButton = findViewById(R.id.fab_button_addPage);
firebaseAuth = FirebaseAuth.getInstance(); // get inSTACE
database = FirebaseDatabase.getInstance();
}
// end region
//# Menu
private void Logout(){ // sign out method called in switchcase
firebaseAuth.signOut();
finish();
startActivity(new Intent(HomeActivity.this,MainActivity.class));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) { //create menu on toolbar
getMenuInflater().inflate(R.menu.menu,menu); //inflated inside
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { // handle on click events on items on menu
switch(item.getItemId()){
case R.id.logoutMenu:{
Logout();
finish();
break;
}
case R.id.ProfileMenu:{
startActivity(new Intent(HomeActivity.this,ProfileActivity.class));
finish();
break;
}
case R.id.HomeMenu:{
startActivity(new Intent(HomeActivity.this,HomeActivity.class));
finish();
break;
}
}
return super.onOptionsItemSelected(item);
}
}
// Endregion
公共类HomeActivity扩展了AppCompatActivity{
私人回收站;
私有浮动操作按钮addNotePageButton;
私有FirebaseAuth FirebaseAuth;
Firebase数据库;
数据库参考说明数据库;
FirebaseRecyclerOptions选项;
FirebaseRecyclerAdapter适配器;//适配器
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//伊尼特
viewSetUp();
//避免
notesDb=database.getReference(“NoteList”).child(firebaseAuth.getCurrentUser().getUid());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
showEachRow();//调用函数
//布顿补充说
addNotePageButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(HomeActivity.this、NoteInputActivity.class);
星触觉(意向);
}
});
}
//区域-用于编辑和删除此部分开始读取文章中的内容,并基于Viewholder和名为custom_layout的xml文件在同一窗口上打开一个窗口
//回收者查看此部分,只有verifed登录用户才能查看自己的数据!
@凌驾
受保护的void onStart(){
super.onStart();
adapter.startListening();
}
@凌驾
受保护的void onStop(){
super.onStop();
adapter.stopListening();
}
@凌驾
公共布尔值onContextItemSelected(@NonNull MenuItem){//viewholder
if(item.getTitle().equals(“编辑注释”)){
showUpdateDialog(adapter.getRef(item.getOrder()).getKey()、adapter.getItem(item.getOrder());
}else if(item.getTitle().equals(“删除注释”)){
deleteNote(adapter.getRef(item.getOrder()).getKey());
}
返回super.onContextItemSelected(项目);
}
私有void deleteNote(字符串适配器){//delete
notesDb.child(适配器).removeValue();
}
私有void showUpdateDialog(最终字符串键,NotesList项){
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setTitle(“[注释编辑模式]”);
setMessage(“请更新所需字段”);
视图更新布局=LayoutInflater.from(this).充气(R.layout.custom布局,null);//视图模型布局
final EditText changed\u title=更新布局.findViewById(R.id.edit\u update\u title);
final EditText changed\u content=更新布局.findViewById(R.id.edit\u update\u text);
更改了_title.setText(item.getTitle());//获取新的值
更改了_content.setText(item.getText());
builder.setView(更新布局);
setPositiveButton(“保存更改”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
String title=changed_title.getText().toString();
String content=changed_content.getText().toString();
NotesList NotesList=新的NotesList(标题、内容);
notesDb.child(键).setValue(notesList);
Toast.makeText(HomeActivity.this,“便笺更新”,Toast.LENGTH_SHORT.show();
}
});
setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
}
});
builder.show();
}
//#端区
//使用Viewholder和model Notes以及名为note_的xml文件(每行+主xml文件)从数据库读取数据的区域。
私有void showEachRow(){//recycler视图
选项=新的FirebaseRecyclerOptions.Builder()
.setQuery(notesDb,NotesList.class)
.build();
适配器=新的FirebaseRecyclerAdapter(选项){//noteViewModel到要获取的模型
@凌驾
受保护的无效onBindViewHolder(@NonNull NoteViewHolder,int位置,@NonNull NotesList模型){
holder.text_title.setText(model.getTitle());
holder.text_content.setText(model.getText());
}
@非空
@凌驾
public NoteViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
View itemView=LayoutInflater.from(viewGroup.getContext())
.充气(R.layout.notes_每行,视图组,false);//充气行
返回新的NoteViewHolder(itemView);
}
};
recyclerView.setAdapter(适配器);
}
//#末端区域
//#启动区域初始化为xml
私有void viewSetUp(){
recyclerView=findViewById(R.id.recyclerView);
addNotePageButton=findViewById(R.id.fab_b
public class HomeActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private FloatingActionButton addNotePageButton;
private FirebaseAuth firebaseAuth;
FirebaseDatabase database;
DatabaseReference notesDb;
FirebaseRecyclerOptions<NotesList> options;
FirebaseRecyclerAdapter<NotesList, NoteViewHolder> adapter; // adapter
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//iniate
viewSetUp();
// refrense
notesDb = database.getReference("NoteList").child(firebaseAuth.getCurrentUser().getUid());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager( new LinearLayoutManager(this) );
showEachRow(); // call function
// buton to add note
addNotePageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(HomeActivity.this, NoteInputActivity.class);
startActivity(intent);
}
});
}
//Region -used for edit and delete this section start reads whats in the post and open ups a window on the same window based on the Viewholder and a xml file called custom_layout
// recycler view in this section and only the verifed logged in user can See his own data!
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) { // viewholder
if (item.getTitle().equals("Edit Note")){
showUpdateDialog(adapter.getRef(item.getOrder()).getKey(),adapter.getItem(item.getOrder()));
} else if (item.getTitle().equals("Delete Note")){
deleteNote(adapter.getRef(item.getOrder()).getKey());
}
return super.onContextItemSelected(item);
}
private void deleteNote(String adapter) { // delete
notesDb.child(adapter).removeValue();
}
private void showUpdateDialog(final String key, NotesList item) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("[ Note Edit Mode]");
builder.setMessage("Please update the desired fields");
View update_layout = LayoutInflater.from(this).inflate(R.layout.custom_layout,null); // view model layou
final EditText changed_title = update_layout.findViewById(R.id.edit_update_title);
final EditText changed_content = update_layout.findViewById(R.id.edit_update_text);
changed_title.setText(item.getTitle()); // get value to new
changed_content.setText(item.getText());
builder.setView(update_layout);
builder.setPositiveButton("Save changes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String title = changed_title.getText().toString();
String content = changed_content.getText().toString();
NotesList notesList = new NotesList(title,content);
notesDb.child(key).setValue(notesList);
Toast.makeText(HomeActivity.this,"Note Updated", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.show();
}
//# EndRegion
// Region to read data from dataBase using Viewholder and model Notes and a xml file called note_each_row + the home xml file.
private void showEachRow(){ // recycler view
options = new FirebaseRecyclerOptions.Builder<NotesList>()
.setQuery(notesDb,NotesList.class)
.build();
adapter = new FirebaseRecyclerAdapter<NotesList, NoteViewHolder>(options) { // noteViewModel to model to get
@Override
protected void onBindViewHolder(@NonNull NoteViewHolder holder, int position, @NonNull NotesList model) {
holder.text_title.setText(model.getTitle());
holder.text_content.setText(model.getText());
}
@NonNull
@Override
public NoteViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.notes_each_row,viewGroup,false); // inflate the rows
return new NoteViewHolder(itemView);
}
};
recyclerView.setAdapter(adapter);
}
//# end Region
//#start region initate to xml
private void viewSetUp(){
recyclerView = findViewById(R.id.recyclerView);
addNotePageButton = findViewById(R.id.fab_button_addPage);
firebaseAuth = FirebaseAuth.getInstance(); // get inSTACE
database = FirebaseDatabase.getInstance();
}
// end region
//# Menu
private void Logout(){ // sign out method called in switchcase
firebaseAuth.signOut();
finish();
startActivity(new Intent(HomeActivity.this,MainActivity.class));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) { //create menu on toolbar
getMenuInflater().inflate(R.menu.menu,menu); //inflated inside
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { // handle on click events on items on menu
switch(item.getItemId()){
case R.id.logoutMenu:{
Logout();
finish();
break;
}
case R.id.ProfileMenu:{
startActivity(new Intent(HomeActivity.this,ProfileActivity.class));
finish();
break;
}
case R.id.HomeMenu:{
startActivity(new Intent(HomeActivity.this,HomeActivity.class));
finish();
break;
}
}
return super.onOptionsItemSelected(item);
}
}
// Endregion
enter code here
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardElevation="4dp"
app:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:id="@+id/random"
android:layout_width="45dp"
android:layout_height="37dp"
android:src="@drawable/note" />
<TextView
android:id="@+id/text_title"
android:background="@color/LightPink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title"
style="@style/TextAppearance.AppCompat.Headline"/>
<View
android:layout_marginTop="5dp"
android:id="@+id/fillView"
android:layout_width="fill_parent"
android:layout_height="3dp"
android:background="#c0c0c0"/>
<TextView
android:id="@+id/text_content"
android:text="content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TextAppearance.AppCompat.Body1"/>
</LinearLayout>
</androidx.cardview.widget.CardView>