Как переместить сообщение в указанное c местоположение, используя базу данных firebase на android - PullRequest
0 голосов
/ 31 марта 2020

Я создаю 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();
  }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...