Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
In the code below, the value of order variable should change according to i's value: String order; switch (i){ case 0: order = CallLog.Calls.DATE + " DESC "; contactViewAda...
#3: Post edited
how to change adapter without looking at adapter?
- Why is the switch statement not executing the correct case blocks?
- ```java
String order;switch (i){case 0:order = CallLog.Calls.DATE + " DESC ";contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");recyclerViewCallLog.swapAdapter(contactViewAdapter,true);recyclerViewCallLog.setAdapter(contactViewAdapter);recyclerViewCallLog.invalidate();recyclerViewCallLog.getAdapter().notifyDataSetChanged();case 1:order = CallLog.Calls.DATE+" ASC ";contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");recyclerViewCallLog.swapAdapter(contactViewAdapter,true);recyclerViewCallLog.setAdapter(contactViewAdapter);recyclerViewCallLog.invalidate();recyclerViewCallLog.getAdapter().notifyDataSetChanged();case 2:order = CallLog.Calls.CACHED_NAME+" ASC ";contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");recyclerViewCallLog.swapAdapter(contactViewAdapter,true);recyclerViewCallLog.setAdapter(contactViewAdapter);recyclerViewCallLog.invalidate();recyclerViewCallLog.getAdapter().notifyDataSetChanged();default:// contactViewAdapter = adapter(CallLog.Calls.DATE+" DESC ");// recyclerViewCallLog.invalidate();// recyclerViewCallLog.setAdapter(contactViewAdapter);}- ```
I was trying to change adapter above way. But I noticed. it doesn't affect earlier data. How can I remove earlier data and set new data without looking at adapter. Even, using the above code sort order is working for DATE ASC. But case 0 is default one. Hence the date DESC had to work. But it doesn't. How can I change adapter? If I add case 0 to default then it works fine. I have recently updated my code.- ```java
- final String[] order = new String[1];
switch (i){case 0:new Handler().postDelayed(() -> {order[0] = CallLog.Calls.DATE + " DESC ";contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer");recyclerViewCallLog.swapAdapter(contactViewAdapter, true);recyclerViewCallLog.setAdapter(contactViewAdapter);recyclerViewCallLog.invalidate();recyclerViewCallLog.getAdapter().notifyDataSetChanged();},1000);case 1:new Handler().postDelayed(() -> {order[0] = CallLog.Calls.DATE+" ASC ";contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer");recyclerViewCallLog.swapAdapter(contactViewAdapter,true);recyclerViewCallLog.setAdapter(contactViewAdapter);recyclerViewCallLog.invalidate();recyclerViewCallLog.getAdapter().notifyDataSetChanged();},1000);case 2:new Handler().postDelayed(() -> {order[0] = CallLog.Calls.CACHED_NAME+" ASC ";contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer");recyclerViewCallLog.swapAdapter(contactViewAdapter,true);recyclerViewCallLog.setAdapter(contactViewAdapter);recyclerViewCallLog.invalidate();recyclerViewCallLog.getAdapter().notifyDataSetChanged();},1000);default:new Handler().postDelayed(() -> {order[0] = CallLog.Calls.DATE + " DESC ";contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer");recyclerViewCallLog.swapAdapter(contactViewAdapter, true);recyclerViewCallLog.setAdapter(contactViewAdapter);recyclerViewCallLog.invalidate();recyclerViewCallLog.getAdapter().notifyDataSetChanged();},1000);}- ```
I earlier thought that I must change or add and delete values in Adapter. But I wanted to directly change adapter instead of doing "something" inside adapter. That's why I said "how to change adapter without looking at adapter?". When I was using switch statement, my data wasn't changing that's why I thought I must work on adapter but It was worse idea. Why adapter isn't changing whenever I am clicking on some other button (which returning i=1,2,3 or whatever)?
- In the code below, the value of `order` variable should change according to `i`'s value:
- ```java
- String order;
- switch (i){
- case 0:
- order = CallLog.Calls.DATE + " DESC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- case 1:
- order = CallLog.Calls.DATE+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- case 2:
- order = CallLog.Calls.CACHED_NAME+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- default:
- //contactViewAdapter = adapter(CallLog.Calls.DATE+" DESC ");
- //recyclerViewCallLog.invalidate();
- //recyclerViewCallLog.setAdapter(contactViewAdapter);
- }
- ```
- When `i` is `0`, the order should be `DESC`, but it's actually `ASC`. I've updated the code to this:
- ```java
- final String[] order = new String[1];
- switch (i){
- case 0:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.DATE + " DESC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter, true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- case 1:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.DATE+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- case 2:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.CACHED_NAME+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- default:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.DATE + " DESC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter, true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- }
- ```
- But now it doesn't work when `i` is `1` or `2`: it should be `ASC` but in those cases it ends up being `DESC`.
- How can I fix this?
#2: Post edited
- ```java
- String order;
- switch (i){
- case 0:
- order = CallLog.Calls.DATE + " DESC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- case 1:
- order = CallLog.Calls.DATE+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- case 2:
- order = CallLog.Calls.CACHED_NAME+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- default:
- // contactViewAdapter = adapter(CallLog.Calls.DATE+" DESC ");
- // recyclerViewCallLog.invalidate();
- // recyclerViewCallLog.setAdapter(contactViewAdapter);
- }
- ```
- I was trying to change adapter above way. But I noticed. it doesn't affect earlier data. How can I remove earlier data and set new data without looking at adapter. Even, using the above code sort order is working for DATE ASC. But case 0 is default one. Hence the date DESC had to work. But it doesn't. How can I change adapter? If I add case 0 to default then it works fine. I have recently updated my code.
- ```java
- final String[] order = new String[1];
- switch (i){
- case 0:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.DATE + " DESC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter, true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- case 1:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.DATE+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- case 2:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.CACHED_NAME+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- default:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.DATE + " DESC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter, true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- }
```
- ```java
- String order;
- switch (i){
- case 0:
- order = CallLog.Calls.DATE + " DESC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- case 1:
- order = CallLog.Calls.DATE+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- case 2:
- order = CallLog.Calls.CACHED_NAME+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- default:
- // contactViewAdapter = adapter(CallLog.Calls.DATE+" DESC ");
- // recyclerViewCallLog.invalidate();
- // recyclerViewCallLog.setAdapter(contactViewAdapter);
- }
- ```
- I was trying to change adapter above way. But I noticed. it doesn't affect earlier data. How can I remove earlier data and set new data without looking at adapter. Even, using the above code sort order is working for DATE ASC. But case 0 is default one. Hence the date DESC had to work. But it doesn't. How can I change adapter? If I add case 0 to default then it works fine. I have recently updated my code.
- ```java
- final String[] order = new String[1];
- switch (i){
- case 0:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.DATE + " DESC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter, true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- case 1:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.DATE+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- case 2:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.CACHED_NAME+" ASC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter,true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- default:
- new Handler().postDelayed(() -> {
- order[0] = CallLog.Calls.DATE + " DESC ";
- contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer");
- recyclerViewCallLog.swapAdapter(contactViewAdapter, true);
- recyclerViewCallLog.setAdapter(contactViewAdapter);
- recyclerViewCallLog.invalidate();
- recyclerViewCallLog.getAdapter().notifyDataSetChanged();
- },1000);
- }
- ```
- I earlier thought that I must change or add and delete values in Adapter. But I wanted to directly change adapter instead of doing "something" inside adapter. That's why I said "how to change adapter without looking at adapter?". When I was using switch statement, my data wasn't changing that's why I thought I must work on adapter but It was worse idea. Why adapter isn't changing whenever I am clicking on some other button (which returning i=1,2,3 or whatever)?
#1: Initial revision
how to change adapter without looking at adapter?
```java String order; switch (i){ case 0: order = CallLog.Calls.DATE + " DESC "; contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer"); recyclerViewCallLog.swapAdapter(contactViewAdapter,true); recyclerViewCallLog.setAdapter(contactViewAdapter); recyclerViewCallLog.invalidate(); recyclerViewCallLog.getAdapter().notifyDataSetChanged(); case 1: order = CallLog.Calls.DATE+" ASC "; contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer"); recyclerViewCallLog.swapAdapter(contactViewAdapter,true); recyclerViewCallLog.setAdapter(contactViewAdapter); recyclerViewCallLog.invalidate(); recyclerViewCallLog.getAdapter().notifyDataSetChanged(); case 2: order = CallLog.Calls.CACHED_NAME+" ASC "; contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order),"dialer"); recyclerViewCallLog.swapAdapter(contactViewAdapter,true); recyclerViewCallLog.setAdapter(contactViewAdapter); recyclerViewCallLog.invalidate(); recyclerViewCallLog.getAdapter().notifyDataSetChanged(); default: // contactViewAdapter = adapter(CallLog.Calls.DATE+" DESC "); // recyclerViewCallLog.invalidate(); // recyclerViewCallLog.setAdapter(contactViewAdapter); } ``` I was trying to change adapter above way. But I noticed. it doesn't affect earlier data. How can I remove earlier data and set new data without looking at adapter. Even, using the above code sort order is working for DATE ASC. But case 0 is default one. Hence the date DESC had to work. But it doesn't. How can I change adapter? If I add case 0 to default then it works fine. I have recently updated my code. ```java final String[] order = new String[1]; switch (i){ case 0: new Handler().postDelayed(() -> { order[0] = CallLog.Calls.DATE + " DESC "; contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer"); recyclerViewCallLog.swapAdapter(contactViewAdapter, true); recyclerViewCallLog.setAdapter(contactViewAdapter); recyclerViewCallLog.invalidate(); recyclerViewCallLog.getAdapter().notifyDataSetChanged(); },1000); case 1: new Handler().postDelayed(() -> { order[0] = CallLog.Calls.DATE+" ASC "; contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer"); recyclerViewCallLog.swapAdapter(contactViewAdapter,true); recyclerViewCallLog.setAdapter(contactViewAdapter); recyclerViewCallLog.invalidate(); recyclerViewCallLog.getAdapter().notifyDataSetChanged(); },1000); case 2: new Handler().postDelayed(() -> { order[0] = CallLog.Calls.CACHED_NAME+" ASC "; contactViewAdapter = new ContactViewAdapter(getActivity(),getActivity(),new ReadContacts().CallLog(getActivity(), order[0]),"dialer"); recyclerViewCallLog.swapAdapter(contactViewAdapter,true); recyclerViewCallLog.setAdapter(contactViewAdapter); recyclerViewCallLog.invalidate(); recyclerViewCallLog.getAdapter().notifyDataSetChanged(); },1000); default: new Handler().postDelayed(() -> { order[0] = CallLog.Calls.DATE + " DESC "; contactViewAdapter = new ContactViewAdapter(getActivity(), getActivity(), new ReadContacts().CallLog(getActivity(), order[0]), "dialer"); recyclerViewCallLog.swapAdapter(contactViewAdapter, true); recyclerViewCallLog.setAdapter(contactViewAdapter); recyclerViewCallLog.invalidate(); recyclerViewCallLog.getAdapter().notifyDataSetChanged(); },1000); } ```