刷新firestorerecycleradapter而不重新启动活动

rwqw0loc  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(445)

我尝试构建的应用程序必须有一个微调器,可以动态更改recyclerview的项。此时,当微调器项被更改时,什么也不会发生,但当我打开另一个活动然后返回时,数据就会更改。如何在微调器所选项被更改时更改数据。下面是我的代码

  1. package com.example.tutorscape;
  2. import androidx.annotation.NonNull;
  3. import androidx.fragment.app.Fragment;
  4. import androidx.fragment.app.FragmentManager;
  5. import androidx.fragment.app.FragmentTransaction;
  6. import androidx.recyclerview.widget.LinearLayoutManager;
  7. import androidx.recyclerview.widget.RecyclerView;
  8. import android.content.Intent;
  9. import android.os.Bundle;
  10. import android.util.Log;
  11. import android.view.LayoutInflater;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.widget.AdapterView;
  15. import android.widget.ImageView;
  16. import android.widget.LinearLayout;
  17. import android.widget.Spinner;
  18. import android.widget.TextView;
  19. import android.widget.Toast;
  20. import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
  21. import com.firebase.ui.firestore.FirestoreRecyclerOptions;
  22. import com.google.firebase.auth.FirebaseAuth;
  23. import com.google.firebase.auth.FirebaseUser;
  24. import com.google.firebase.firestore.FirebaseFirestore;
  25. import com.google.firebase.firestore.Query;
  26. import com.squareup.picasso.Picasso;
  27. import jp.wasabeef.picasso.transformations.CropCircleTransformation;
  28. public class TutorListActivity extends BaseActivity {
  29. private SqliteDatabase mDatabase;
  30. boolean isFragmentLoaded;
  31. Fragment menuFragment;
  32. TextView title;
  33. ImageView menuButton;
  34. private static final String TAG = "SignedInActivity";
  35. //Firebase
  36. private FirebaseAuth.AuthStateListener mAuthListener;
  37. // widgets and UI References
  38. private RecyclerView mFirebaseList;
  39. private FirebaseFirestore firebaseFirestore;
  40. private FirestoreRecyclerAdapter adapter;
  41. @Override
  42. protected void onResume() {
  43. super.onResume();
  44. checkAuthenticationState();
  45. }
  46. private void checkAuthenticationState(){
  47. FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
  48. if(user == null){
  49. Intent intent = new Intent(TutorListActivity.this, LoginStudent.class);
  50. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
  51. startActivity(intent);
  52. finish();
  53. }else{
  54. Log.d(TAG, "checkAuthenticationState: user is authenticated.");
  55. }
  56. }
  57. @Override
  58. protected void onCreate(Bundle savedInstanceState) {
  59. super.onCreate(savedInstanceState);
  60. initAddlayout(R.layout.activity_tutor_list);
  61. Spinner spinner =(Spinner)findViewById(R.id.spinner);
  62. firebaseFirestore = FirebaseFirestore.getInstance();
  63. mFirebaseList = findViewById(R.id.recyclerView);
  64. mDatabase = new SqliteDatabase(this);
  65. title = (TextView) findViewById(R.id.title_top);
  66. menuButton = (ImageView) findViewById(R.id.menu_icon);
  67. title.setText("Menu Activity");
  68. menuButton.setOnClickListener(new View.OnClickListener() {
  69. @Override
  70. public void onClick(View v) {
  71. if (!isFragmentLoaded) {
  72. loadFragment();
  73. title.setText("Profile");
  74. } else {
  75. if (menuFragment != null) {
  76. if (menuFragment.isAdded()) {
  77. hideFragment();
  78. }
  79. }
  80. }
  81. }
  82. });
  83. Query query = firebaseFirestore.collection("Admin");
  84. FirestoreRecyclerOptions<Model> options = new FirestoreRecyclerOptions.Builder<Model>()
  85. .setQuery(query, Model.class)
  86. .build();
  87. adapter = new FirestoreRecyclerAdapter<Model, MyViewHolder>(options) {
  88. @NonNull
  89. @Override
  90. public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  91. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
  92. return new MyViewHolder(view);
  93. }
  94. @Override
  95. protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull Model model) {
  96. holder.list_name.setText(model.getName());
  97. holder.list_title.setText(model.getTitle());
  98. holder.list_imageText.setText(model.getImage());
  99. holder.weeklyRate.setText(model.getWeeklyRate());
  100. holder.subject.setText(model.getSubject());
  101. holder.phone.setText(model.getPhone());
  102. holder.trial.setText(model.getTrial());
  103. Picasso.get()
  104. .load(model.getImage())
  105. // .centerCrop()
  106. // .placeholder(R.drawable.account)
  107. // .resize(w, h)
  108. .transform(new CropCircleTransformation())
  109. .into(holder.imageView);
  110. }
  111. };
  112. mFirebaseList.setHasFixedSize(true);
  113. mFirebaseList.setLayoutManager(new LinearLayoutManager(TutorListActivity.this));
  114. mFirebaseList.setAdapter(adapter);
  115. spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  116. @Override
  117. public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  118. if(position==0){
  119. Query query = firebaseFirestore.collection("Admin");
  120. FirestoreRecyclerOptions<Model> options = new FirestoreRecyclerOptions.Builder<Model>()
  121. .setQuery(query, Model.class)
  122. .build();
  123. adapter = new FirestoreRecyclerAdapter<Model, MyViewHolder>(options) {
  124. @NonNull
  125. @Override
  126. public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  127. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
  128. return new MyViewHolder(view);
  129. }
  130. @Override
  131. protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull Model model) {
  132. holder.list_name.setText(model.getName());
  133. holder.list_title.setText(model.getTitle());
  134. holder.list_imageText.setText(model.getImage());
  135. holder.weeklyRate.setText(model.getWeeklyRate());
  136. holder.subject.setText(model.getSubject());
  137. holder.phone.setText(model.getPhone());
  138. holder.trial.setText(model.getTrial());
  139. Picasso.get()
  140. .load(model.getImage())
  141. // .centerCrop()
  142. // .placeholder(R.drawable.account)
  143. // .resize(w, h)
  144. .transform(new CropCircleTransformation())
  145. .into(holder.imageView);
  146. }
  147. };
  148. mFirebaseList.setHasFixedSize(true);
  149. mFirebaseList.setLayoutManager(new LinearLayoutManager(TutorListActivity.this));
  150. mFirebaseList.setAdapter(adapter);
  151. }else if(position==1){
  152. Query query = firebaseFirestore.collection("one");
  153. FirestoreRecyclerOptions<Model> options = new FirestoreRecyclerOptions.Builder<Model>()
  154. .setQuery(query, Model.class)
  155. .build();
  156. adapter = new FirestoreRecyclerAdapter<Model, MyViewHolder>(options) {
  157. @NonNull
  158. @Override
  159. public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  160. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
  161. return new MyViewHolder(view);
  162. }
  163. @Override
  164. protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull Model model) {
  165. holder.list_name.setText(model.getName());
  166. holder.list_title.setText(model.getTitle());
  167. holder.list_imageText.setText(model.getImage());
  168. holder.weeklyRate.setText(model.getWeeklyRate());
  169. holder.subject.setText(model.getSubject());
  170. holder.phone.setText(model.getPhone());
  171. holder.trial.setText(model.getTrial());
  172. Picasso.get()
  173. .load(model.getImage())
  174. // .centerCrop()
  175. // .placeholder(R.drawable.account)
  176. // .resize(w, h)
  177. .transform(new CropCircleTransformation())
  178. .into(holder.imageView);
  179. }
  180. };
  181. mFirebaseList.setHasFixedSize(true);
  182. mFirebaseList.setLayoutManager(new LinearLayoutManager(TutorListActivity.this));
  183. mFirebaseList.setAdapter(adapter);
  184. }else if(position==2){
  185. }else if (position==3){
  186. }else if(position==4){
  187. }else if(position==5){
  188. }else if (position==6){
  189. }
  190. }
  191. @Override
  192. public void onNothingSelected(AdapterView<?> parent) {
  193. }
  194. });
  195. }
  196. private class MyViewHolder extends RecyclerView.ViewHolder {
  197. private TextView list_name, subject, weeklyRate, trial, phone;
  198. private TextView list_title, list_imageText;
  199. private ImageView imageView;
  200. public MyViewHolder(@NonNull View itemView) {
  201. super(itemView);
  202. subject = itemView.findViewById(R.id.textViewSubject);
  203. weeklyRate = itemView.findViewById(R.id.textViewWeeklyRate);
  204. trial = itemView.findViewById(R.id.textViewTrial);
  205. phone = itemView.findViewById(R.id.textViewPhone);
  206. list_imageText = itemView.findViewById(R.id.phoneTextView);
  207. list_name = itemView.findViewById(R.id.textViewName);
  208. list_title = itemView.findViewById(R.id.textViewTitle);
  209. imageView = itemView.findViewById(R.id.imageView);
  210. itemView.setOnClickListener(new View.OnClickListener() {
  211. @Override
  212. public void onClick(View v) {
  213. final String name = list_name.getText().toString();
  214. final String ph_no = subject.getText().toString();
  215. final String title = list_title.getText().toString();
  216. final String sweekly = weeklyRate.getText().toString();
  217. final String strial = trial.getText().toString();
  218. final String image = list_imageText.getText().toString();
  219. final String smsNumber = phone.getText().toString();
  220. Contacts newContact = new Contacts(name, ph_no, title, image, sweekly, strial, smsNumber);
  221. mDatabase.addContacts(newContact);
  222. // String smsNumber = "263774233406"; // E164 format without '+' sign
  223. Intent sendIntent = new Intent(Intent.ACTION_SEND);
  224. sendIntent.setType("text/plain");
  225. sendIntent.putExtra(Intent.EXTRA_TEXT, "Hello Mr Russo.");
  226. sendIntent.putExtra("jid", smsNumber + "@s.whatsapp.net"); //phone number without "+" prefix
  227. sendIntent.setPackage("com.whatsapp");
  228. /*if (sendIntent.resolveActivity(getActivity().getPackageManager()) == null) {
  229. Toast.makeText(this, "Error/n" + e.toString(), Toast.LENGTH_SHORT).show();
  230. return;
  231. }
  232. */
  233. startActivity(sendIntent);
  234. }
  235. });
  236. }
  237. }
  238. @Override
  239. protected void onStart() {
  240. super.onStart();
  241. adapter.startListening();
  242. }
  243. @Override
  244. protected void onStop() {
  245. super.onStop();
  246. adapter.stopListening();
  247. }
  248. public void hideFragment() {
  249. FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
  250. fragmentTransaction.setCustomAnimations(R.anim.slide_down, R.anim.slide_up);
  251. fragmentTransaction.remove(menuFragment);
  252. fragmentTransaction.commit();
  253. menuButton.setImageResource(R.drawable.ic_round_notes);
  254. isFragmentLoaded = false;
  255. title.setText("Main Activity");
  256. }
  257. public void loadFragment() {
  258. FragmentManager fm = getSupportFragmentManager();
  259. menuFragment = fm.findFragmentById(R.id.container);
  260. menuButton.setImageResource(R.drawable.my_up);
  261. if (menuFragment == null) {
  262. menuFragment = new MenuFragment();
  263. FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
  264. fragmentTransaction.setCustomAnimations(R.anim.slide_down, R.anim.slide_up);
  265. fragmentTransaction.add(R.id.container, menuFragment);
  266. fragmentTransaction.commit();
  267. }
  268. isFragmentLoaded = true;
  269. }
  270. @Override
  271. public void onBackPressed() {
  272. if (isFragmentLoaded=true){
  273. FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
  274. fragmentTransaction.setCustomAnimations(R.anim.slide_down, R.anim.slide_up);
  275. fragmentTransaction.remove(menuFragment);
  276. fragmentTransaction.commit();
  277. menuButton.setImageResource(R.drawable.ic_round_notes);
  278. isFragmentLoaded = false;
  279. title.setText("Main Activity");
  280. }else{
  281. super.onBackPressed();
  282. }
  283. }
  284. public void signOut() {
  285. Log.d(TAG, "signOut: signing out");
  286. FirebaseAuth.getInstance().signOut();
  287. // SharedPreferences.Editor editor = getSharedPreferences(myPrefs, MODE_PRIVATE).edit();
  288. // editor.putBoolean("isStudent", false);
  289. // editor.apply();
  290. Intent intent = new Intent(TutorListActivity.this, WelcomeActivity.class);
  291. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
  292. startActivity(intent);
  293. finish();
  294. }
  295. /*
  296. ----------------------------- Firebase setup ---------------------------------
  297. */
  298. private void setupFirebaseAuth(){
  299. Log.d(TAG, "setupFirebaseAuth: started.");
  300. mAuthListener = new FirebaseAuth.AuthStateListener() {
  301. @Override
  302. public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
  303. FirebaseUser user = firebaseAuth.getCurrentUser();
  304. if (user != null) {
  305. Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
  306. } else {
  307. Log.d(TAG, "onAuthStateChanged:signed_out");
  308. Intent intent = new Intent(TutorListActivity.this, LoginStudent.class);
  309. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
  310. startActivity(intent);
  311. finish();
  312. }
  313. // ...
  314. }
  315. };
  316. }
  317. }
qnyhuwrf

qnyhuwrf1#

如果我正确地阅读了您的代码,您希望适配器在图像加载到以下位置后刷新ui:

  1. Picasso.get()
  2. .load(model.getImage())
  3. // .centerCrop()
  4. // .placeholder(R.drawable.account)
  5. // .resize(w, h)
  6. .transform(new CropCircleTransformation())
  7. .into(holder.imageView);

在这种情况下,您可以将回调传递给 into 打电话给我 adapter.notifyDataSetChanged 在那里。

  1. .into(holder.imageView, new Callback() {
  2. @Override
  3. public void onSuccess() {
  4. adapter.notifyDataSetChanged();
  5. }
  6. @Override
  7. public void onError(java.lang.Exception e) {
  8. Log.e("Image", "Error loading image", e);
  9. }
  10. );
展开查看全部
bt1cpqcv

bt1cpqcv2#

添加了adapter.startlistening();在每一个项目点击,现在它的工作…每个项目现在看起来如下

  1. else if (position==6){
  2. Query query = firebaseFirestore.collection("six");
  3. FirestoreRecyclerOptions<Model> options = new FirestoreRecyclerOptions.Builder<Model>()
  4. .setQuery(query, Model.class)
  5. .build();
  6. adapter = new FirestoreRecyclerAdapter<Model, MyViewHolder>(options) {
  7. @NonNull
  8. @Override
  9. public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  10. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
  11. return new MyViewHolder(view);
  12. }
  13. @Override
  14. protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull Model model) {
  15. holder.list_name.setText(model.getName());
  16. holder.list_title.setText(model.getTitle());
  17. holder.list_imageText.setText(model.getImage());
  18. holder.weeklyRate.setText(model.getWeeklyRate());
  19. holder.subject.setText(model.getSubject());
  20. holder.phone.setText(model.getPhone());
  21. holder.trial.setText(model.getTrial());
  22. Picasso.get()
  23. .load(model.getImage())
  24. // .centerCrop()
  25. // .placeholder(R.drawable.account)
  26. // .resize(w, h)
  27. .transform(new CropCircleTransformation())
  28. .into(holder.imageView);
  29. }
  30. };
  31. mFirebaseList.setHasFixedSize(true);
  32. mFirebaseList.setLayoutManager(new LinearLayoutManager(TutorListActivity.this));
  33. mFirebaseList.setAdapter(adapter);
  34. adapter.startListening();
  35. adapter.notifyDataSetChanged();
  36. }

效果很好

展开查看全部

相关问题