Я создаю android приложение, использующее базу данных Firebase. На странице повторного просмотра я внес некоторые изменения, чтобы отображать сообщения в обратном режиме, чтобы теперь они отображались в верхней части страницы.
Я хочу создать функциональность, позволяющую переместить любой пост в обзоре переработчика на последнюю страницу просмотра переработчика.
Например, если я щелкну по сообщению в recylervew, на странице будет go можно увидеть более подробно. На странице есть кнопка «читать». что эта кнопка будет делать, это когда я нажимаю кнопку чтения. сообщение в recylerview переместится на последнюю страницу просмотра. Таким образом, пользователь не сможет увидеть сообщение, пока пользователь не прокрутит весь путь до страницы просмотра реселлера. и я хочу применить эту функциональность к любому сообщению на странице повторного просмотра.
Я не знаком с базой данных Firebase, поэтому не знаю, как заставить это работать. Любая помощь будет оценена. Заранее благодарю.
public class Fragment1 extends Fragment {
private RecyclerView recyclerView;
private BibleAdapter adapter;
private ArrayList<Bible> arrayList;
private FirebaseDatabase database;
private DatabaseReference databaseReference;
public static final String VERSE_DATA="data";
public static final int REQUEST_CODE=101;
public static final String HOLDER="holder";
public static final String POSITION="position";
public static final String ARRAYLIST="arraylist";
LinearLayoutManager mLayoutManager; //for sorting
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup
container, @Nullable Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment1,
container, false);
//GridLayoutManager layoutManager = new
GridLayoutManager(getContext(), 2);
recyclerView = rootView.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
//layoutManager = new LinearLayoutManager(getContext(),
LinearLayoutManager.VERTICAL, false);
mLayoutManager = new LinearLayoutManager(getContext());
mLayoutManager.setReverseLayout(true);
//mLayoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(mLayoutManager);
arrayList = new ArrayList<>();
database = FirebaseDatabase.getInstance();
databaseReference = database.getReference("Bible");
adapter = new BibleAdapter(arrayList, getContext());
recyclerView.setAdapter(adapter);
databaseReference.addListenerForSingleValueEvent(new
ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
arrayList.clear();
for(DataSnapshot snapshot: dataSnapshot.getChildren()){
Bible bible = snapshot.getValue(Bible.class);
arrayList.add(bible);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.e("fragment1",
String.valueOf(databaseError.toException()));//에러문 출력
}
});
adapter.setOnItemClickListener(new OnVerseItemClickListener() {
@Override
public void onItemClick(BibleAdapter.BibleViewHolder holder, View
view, int position) {
// Toast.makeText(getContext(), "num"+adapter.getItemCount(),
Toast.LENGTH_LONG).show();
Intent intent = new Intent(getContext(), Verse.class);
Bible verse = new Bible(arrayList.get(position).getImage(),
arrayList.get(position).getBibleType(),
arrayList.get(position).getVerse(),
arrayList.get(position).getContent(),
arrayList.get(position).getKeysentance());
intent.putExtra(VERSE_DATA, verse);
startActivityForResult(intent, REQUEST_CODE);
}
});
return rootView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
publi c класс BibleAdapter расширяет RecyclerView.Adapter {
private ArrayList<Bible> arrayList;
private Context context;
private OnVerseItemClickListener listener;
public BibleAdapter(ArrayList<Bible> arrayList, Context context) {
this.arrayList = arrayList;
this.context = context;
}
public void setOnItemClickListener(OnVerseItemClickListener listener){
this.listener = listener;
}
@NonNull
@Override
public BibleAdapter.BibleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.verse_item, parent, false);
BibleViewHolder holder = new BibleViewHolder(view, listener);
return holder;
}
@Override
public void onBindViewHolder(@NonNull BibleAdapter.BibleViewHolder holder, int position) {
Glide.with(holder.imageView)
.load(arrayList.get(position).getImage())
.into(holder.imageView);
holder.bibleType.setText(arrayList.get(position).getBibleType());
holder.keysentance.setText(arrayList.get(position).getKeysentance());
holder.verse.setText(arrayList.get(position).getVerse());
}
@Override
public int getItemCount() {
return (arrayList!=null? arrayList.size():0);
}
public class BibleViewHolder extends RecyclerView.ViewHolder{
ImageView imageView;
TextView bibleType;
TextView verse;
TextView keysentance;
public BibleViewHolder(@NonNull View itemView, final OnVerseItemClickListener listener) {
super(itemView);
this.imageView = itemView.findViewById(R.id.imageView);
this.bibleType = itemView.findViewById(R.id.bibleType);
this.keysentance = itemView.findViewById(R.id.keysentance);
this.verse = itemView.findViewById(R.id.verse);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if(listener != null){
listener.onItemClick(BibleViewHolder.this, v, position);
}
}
});
}
}
publi c класс MainActivity расширяет AppCompatActivity, реализует NavigationView.OnNavigationItemSelectedListener, FragmentCallback
Fragment1 fragment1;
Fragment2 fragment2;
Fragment3 fragment3;
Toolbar toolbar;
private AppBarConfiguration mAppBarConfiguration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
fragment1 = new Fragment1();
fragment2 = new Fragment2();
fragment3 = new Fragment3();
getSupportFragmentManager().beginTransaction().add(R.id.container, fragment1).commit();
}
@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if(drawer.isDrawerOpen(GravityCompat.START)){
drawer.closeDrawer(GravityCompat.START);
}else{
super.onBackPressed();
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if(id == R.id.menu1){
Toast.makeText(this, "첫번째 메뉴 선택됨.", Toast.LENGTH_LONG).show();
onFragmentSelected(0, null);
}else if(id == R.id.menu2){
Toast.makeText(this, "두번째 메뉴 선택됨.", Toast.LENGTH_LONG).show();
onFragmentSelected(1, null);
}else if(id == R.id.menu3) {
Toast.makeText(this, "세번째 메뉴 선택됨.", Toast.LENGTH_LONG).show();
onFragmentSelected(2, null);
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onFragmentSelected(int position, Bundle bundle) {
Fragment curFragment = null;
if(position == 0){
curFragment = fragment1;
toolbar.setTitle("첫번째 화면");
}else if(position == 1){
curFragment = fragment2;
toolbar.setTitle("두번째 화면");
}else if(position == 2){
curFragment = fragment3;
toolbar.setTitle("세번째 화면");
}
getSupportFragmentManager().beginTransaction().replace(R.id.container,
curFragment).commit();
}
}