mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Crash fixed due to notifyDataSetChange
This commit is contained in:
parent
c93bcda6f6
commit
ecebe4c584
6 changed files with 120 additions and 4 deletions
|
|
@ -250,4 +250,24 @@ public class CategoryDetailsActivity extends NavigationBaseActivity
|
|||
}
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called on success of API call for Images inside a category.
|
||||
* The viewpager will notified that number of items have changed.
|
||||
*/
|
||||
public void viewPagerNotifyDataSetChanged() {
|
||||
if (mediaDetails!=null){
|
||||
mediaDetails.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called when viewPager has reached its end.
|
||||
* Fetches more images using search query and adds it to the grid view and viewpager adapter
|
||||
*/
|
||||
public void requestMoreImages() {
|
||||
if (categoryImagesListFragment!=null){
|
||||
categoryImagesListFragment.fetchMoreImagesViewPager();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,6 +170,16 @@ public class CategoryImagesActivity
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called on success of API call for featured Images.
|
||||
* The viewpager will notified that number of items have changed.
|
||||
*/
|
||||
public void viewPagerNotifyDataSetChanged() {
|
||||
if (mediaDetails!=null){
|
||||
mediaDetails.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called on from getCount of MediaDetailPagerFragment
|
||||
* The viewpager will contain same number of media items as that of media elements in adapter.
|
||||
|
|
@ -236,4 +246,14 @@ public class CategoryImagesActivity
|
|||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called when viewPager has reached its end.
|
||||
* Fetches more images using search query and adds it to the gridView and viewpager adapter
|
||||
*/
|
||||
public void requestMoreImages() {
|
||||
if (categoryImagesListFragment!=null){
|
||||
categoryImagesListFragment.fetchMoreImagesViewPager();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,6 +190,20 @@ public class CategoryImagesListFragment extends DaggerFragment {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called when viewPager has reached its end.
|
||||
* Fetches more images for the category and adds it to the grid view and viewpager adapter
|
||||
*/
|
||||
public void fetchMoreImagesViewPager(){
|
||||
if (hasMoreImages && !isLoading) {
|
||||
isLoading = true;
|
||||
fetchMoreImages();
|
||||
}
|
||||
if (!hasMoreImages){
|
||||
progressBar.setVisibility(GONE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches more images for the category and adds it to the grid view adapter
|
||||
*/
|
||||
|
|
@ -228,8 +242,17 @@ public class CategoryImagesListFragment extends DaggerFragment {
|
|||
return;
|
||||
}
|
||||
gridAdapter.addItems(collection);
|
||||
try {
|
||||
((CategoryImagesActivity) getContext()).viewPagerNotifyDataSetChanged();
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
try {
|
||||
((CategoryDetailsActivity) getContext()).viewPagerNotifyDataSetChanged();
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
progressBar.setVisibility(GONE);
|
||||
isLoading = false;
|
||||
statusTextView.setVisibility(GONE);
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ public class SearchActivity extends NavigationBaseActivity implements MediaDetai
|
|||
private FragmentManager supportFragmentManager;
|
||||
private MediaDetailPagerFragment mediaDetails;
|
||||
ViewPagerAdapter viewPagerAdapter;
|
||||
private String query;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
|
@ -104,6 +105,7 @@ public class SearchActivity extends NavigationBaseActivity implements MediaDetai
|
|||
.debounce(500, TimeUnit.MILLISECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe( query -> {
|
||||
this.query = query.toString();
|
||||
//update image list
|
||||
if (!TextUtils.isEmpty(query)) {
|
||||
viewPager.setVisibility(View.VISIBLE);
|
||||
|
|
@ -145,7 +147,16 @@ public class SearchActivity extends NavigationBaseActivity implements MediaDetai
|
|||
*/
|
||||
@Override
|
||||
public void notifyDatasetChanged() {
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called on success of API call for image Search.
|
||||
* The viewpager will notified that number of items have changed.
|
||||
*/
|
||||
public void viewPagerNotifyDataSetChanged() {
|
||||
if (mediaDetails!=null){
|
||||
mediaDetails.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -245,4 +256,14 @@ public class SearchActivity extends NavigationBaseActivity implements MediaDetai
|
|||
// https://stackoverflow.com/questions/6117967/how-to-remove-focus-without-setting-focus-to-another-control/15481511
|
||||
viewPager.requestFocus();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called when viewPager has reached its end.
|
||||
* Fetches more images using search query and adds it to the recycler view and viewpager adapter
|
||||
*/
|
||||
public void requestMoreImages() {
|
||||
if (searchImageFragment!=null){
|
||||
searchImageFragment.addImagesToList(query);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ import android.view.View;
|
|||
import android.view.ViewGroup;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.pedrogomez.renderers.RVRendererAdapter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
|
@ -160,6 +162,7 @@ public class SearchImageFragment extends CommonsDaggerSupportFragment {
|
|||
progressBar.setVisibility(View.GONE);
|
||||
imagesAdapter.addAll(mediaList);
|
||||
imagesAdapter.notifyDataSetChanged();
|
||||
((SearchActivity)getContext()).viewPagerNotifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -179,6 +182,7 @@ public class SearchImageFragment extends CommonsDaggerSupportFragment {
|
|||
progressBar.setVisibility(View.GONE);
|
||||
imagesAdapter.addAll(mediaList);
|
||||
imagesAdapter.notifyDataSetChanged();
|
||||
((SearchActivity)getContext()).viewPagerNotifyDataSetChanged();
|
||||
|
||||
// check if user is waiting for 5 seconds if yes then save search query to history.
|
||||
Handler handler = new Handler();
|
||||
|
|
@ -239,7 +243,7 @@ public class SearchImageFragment extends CommonsDaggerSupportFragment {
|
|||
return null;
|
||||
}
|
||||
else {
|
||||
return new Media(imagesAdapter.getItem(i).getFilename());
|
||||
return imagesAdapter.getItem(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,9 +35,12 @@ import javax.inject.Named;
|
|||
import fr.free.nrw.commons.Media;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.auth.SessionManager;
|
||||
import fr.free.nrw.commons.category.CategoryDetailsActivity;
|
||||
import fr.free.nrw.commons.category.CategoryImagesActivity;
|
||||
import fr.free.nrw.commons.contributions.Contribution;
|
||||
import fr.free.nrw.commons.contributions.ContributionsActivity;
|
||||
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
|
||||
import fr.free.nrw.commons.explore.SearchActivity;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import fr.free.nrw.commons.utils.ImageUtils;
|
||||
import timber.log.Timber;
|
||||
|
|
@ -62,6 +65,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
|
|||
ViewPager pager;
|
||||
private Boolean editable;
|
||||
private boolean isFeaturedImage;
|
||||
MediaDetailAdapter adapter;
|
||||
|
||||
public MediaDetailPagerFragment() {
|
||||
this(false, false);
|
||||
|
|
@ -81,7 +85,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
|
|||
ButterKnife.bind(this,view);
|
||||
pager.addOnPageChangeListener(this);
|
||||
|
||||
final MediaDetailAdapter adapter = new MediaDetailAdapter(getChildFragmentManager());
|
||||
adapter = new MediaDetailAdapter(getChildFragmentManager());
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
final int pageNumber = savedInstanceState.getInt("current-page");
|
||||
|
|
@ -269,11 +273,35 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
|
|||
|
||||
public void showImage(int i) {
|
||||
Handler handler = new Handler();
|
||||
handler.postDelayed(() -> pager.setCurrentItem(i), 10);
|
||||
handler.postDelayed(() -> pager.setCurrentItem(i), 5);
|
||||
}
|
||||
|
||||
/**
|
||||
* The method notify the viewpager that number of items have changed.
|
||||
*/
|
||||
public void notifyDataSetChanged(){
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int i, float v, int i2) {
|
||||
if (i+1 >= adapter.getCount()){
|
||||
try{
|
||||
((CategoryImagesActivity) getContext()).requestMoreImages();
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
try{
|
||||
((CategoryDetailsActivity) getContext()).requestMoreImages();
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
try{
|
||||
((SearchActivity) getContext()).requestMoreImages();
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
getActivity().supportInvalidateOptionsMenu();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue