【发布时间】:2020-05-12 13:29:03
【问题描述】:
感谢您的光临。所以我的问题是,我通过 Youtube 的 CodingInFlow 尝试了一些教程。我密切关注,但这里有一个错误。我认为是由于 AndroidX 的更新或其他原因。所以问题是无法编译 onClick 方法(计划是单击并查看 entreis 的详细信息),其他一切正常,我可以将日期保存到 firestore。
希望有人可以帮助我...谢谢!!!!
我使用的是 Android Studio 3.6.3、Gradle 6.4
错误片段
在 AdapterJava 文件中
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getBindingAdapterPosition ();
DocumentSnapshot documentSnapshot = getSnapshots().getSnapshot(position);
if ((position != RecyclerView .NO_POSITION) && listener != null) {
listener.onItemClick(getSnapshots().getSnapshot(position),position);
}
}
});
下面的完整代码:如果需要 适配器 Java 文件
public class AddEntryAdapter extends FirestoreRecyclerAdapter<Entry, AddEntryAdapter.EntryHolder>{
private AdapterView.OnItemClickListener listener;
public AddEntryAdapter(@NonNull FirestoreRecyclerOptions<Entry> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull EntryHolder holder, int position, @NonNull Entry model) {
holder.textViewTitle.setText(model.getTitle());
holder.textViewDescription.setText(model.getDescription());
holder.textViewPriority.setText(String.valueOf(model.getPriority()));
}
@NonNull
@Override
public EntryHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.entry_item,
parent, false);
return new EntryHolder(v);
}
public void deleteItem(int position) {
getSnapshots().getSnapshot(position).getReference().delete();
}
class EntryHolder extends RecyclerView.ViewHolder {
TextView textViewTitle;
TextView textViewDescription;
TextView textViewPriority;
public EntryHolder(View itemView) {
super(itemView);
textViewTitle = itemView.findViewById(R.id.text_view_title);
textViewDescription = itemView.findViewById(R.id.text_view_description);
textViewPriority = itemView.findViewById(R.id.text_view_priority);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getBindingAdapterPosition ();
DocumentSnapshot documentSnapshot = getSnapshots().getSnapshot(position);
if ((position != RecyclerView .NO_POSITION) && listener != null) {
listener.onItemClick(getSnapshots().getSnapshot(position),position);
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(DocumentSnapshot documentSnapshot, int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = (AdapterView.OnItemClickListener) listener;
}
}
Activity 显示 RecyclerView,用户可以点击卡片查看条目的详细信息。 这里还有底部导航栏的代码,不知道是不是崩溃的原因。
public class PastEntriesActivity extends AppCompatActivity {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference notebookRef = db.collection("UserEntries");
private AddEntryAdapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pastentries);
BottomNavigationView bottomNavigationView = (BottomNavigationView)
findViewById(R.id.bottomNavView_Bar);
BottomNavigationViewHelper.removeNavigationShiftMode(bottomNavigationView);
Menu menu = bottomNavigationView.getMenu();
MenuItem menuItem = menu.getItem(3);
menuItem.setChecked(true);
setUpRecyclerView();
bottomNavigationView.setOnNavigationItemSelectedListener(new
BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.ic_main:
Intent intent0 = new Intent(PastEntriesActivity.this, MainActivity.class);
startActivity(intent0);
break;
case R.id.ic_search:
Intent intent1 = new Intent(PastEntriesActivity.this, SearchActivity.class);
startActivity(intent1);
break;
case R.id.ic_add_entries:
Intent intent2 = new Intent(PastEntriesActivity.this, PastEntriesActivity.class);
startActivity(intent2);
break;
case R.id.ic_past_entries:
break;
case R.id.ic_profile:
Intent intent4 = new Intent(PastEntriesActivity.this, ProfileActivity.class);
startActivity(intent4);
break;
}
return false;
}
});
}
private void setUpRecyclerView() {
Query query = notebookRef.orderBy("priority", Query.Direction.DESCENDING);
FirestoreRecyclerOptions<Entry> options = new FirestoreRecyclerOptions.Builder<Entry>()
.setQuery(query, Entry.class)
.build();
adapter = new AddEntryAdapter(options);
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
adapter.deleteItem(viewHolder.getBindingAdapterPosition());
}
}).attachToRecyclerView(recyclerView);
adapter.setOnItemClickListener(new AddEntryAdapter.OnItemClickListener() {
@Override
public void onItemClick(DocumentSnapshot documentSnapshot, int position) {
Entry entry = documentSnapshot.toObject(Entry.class);
String id = documentSnapshot.getId();
String path = documentSnapshot.getReference().getPath();
Toast.makeText(PastEntriesActivity.this,
"Position: " + position + " ID: " + id, Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
}
【问题讨论】:
标签: java android firebase android-recyclerview google-cloud-firestore