Skip to content

Feature Fix : GroupsListFragment #291

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
package com.mifos.mifosxdroid.adapters;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.mifos.mifosxdroid.R;
Expand All @@ -20,7 +20,7 @@
import butterknife.BindView;
import butterknife.ButterKnife;

public class GroupNameListAdapter extends BaseAdapter {
public class GroupNameListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

LayoutInflater layoutInflater;
List<Group> pageItems;
Expand All @@ -31,12 +31,30 @@ public GroupNameListAdapter(Context context, List<Group> pageItems) {
this.pageItems = pageItems;
}


@Override
public int getCount() {
return pageItems.size();
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder vh;
View v = LayoutInflater.from(parent.getContext()).inflate(
R.layout.row_group_name, parent, false);
vh = new ViewHolder(v);
return vh;
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolder) {
((ViewHolder) holder).tv_groupsName.setText(pageItems.get(position).getName());
((ViewHolder) holder).tv_groupsId.setText(pageItems.get(position).getId().toString());
}
}


@Override
public int getItemCount() {
return pageItems.size();
}

public Group getItem(int position) {
return pageItems.get(position);
}
Expand All @@ -46,38 +64,17 @@ public long getItemId(int i) {
return 0;
}

@Override
public View getView(int position, View view, ViewGroup viewGroup) {

ReusableViewHolder reusableViewHolder;

if (view == null) {
view = layoutInflater.inflate(R.layout.row_group_name, null);
reusableViewHolder = new ReusableViewHolder(view);
view.setTag(reusableViewHolder);

} else {
reusableViewHolder = (ReusableViewHolder) view.getTag();
}

reusableViewHolder.tv_groupsName.setText(pageItems.get(position).getName());


reusableViewHolder.tv_groupsId.setText(pageItems.get(position).getId().toString());

return view;
}

static class ReusableViewHolder {
public static class ViewHolder extends RecyclerView.ViewHolder {

@BindView(R.id.tv_grouplistName)
TextView tv_groupsName;

@BindView(R.id.tv_groupsId)
TextView tv_groupsId;

public ReusableViewHolder(View view) {
ButterKnife.bind(this, view);
public ViewHolder(View v) {
super(v);
ButterKnife.bind(this, v);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,24 @@
*/
package com.mifos.mifosxdroid.online.groupslist;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.mifos.mifosxdroid.R;
import com.mifos.mifosxdroid.adapters.GroupNameListAdapter;
import com.mifos.mifosxdroid.core.EndlessRecyclerOnScrollListener;
import com.mifos.mifosxdroid.core.MifosBaseActivity;
import com.mifos.mifosxdroid.core.MifosBaseFragment;
import com.mifos.mifosxdroid.core.RecyclerItemClickListner;
import com.mifos.mifosxdroid.core.util.Toaster;
import com.mifos.mifosxdroid.login.LoginActivity;
import com.mifos.mifosxdroid.online.GroupsActivity;
import com.mifos.mifosxdroid.online.grouplist.GroupListFragment;
Expand All @@ -39,29 +40,28 @@
/**
* Created by nellyk on 2/27/2016.
*/
public class GroupsListFragment extends MifosBaseFragment implements GroupsListMvpView {
public class GroupsListFragment extends MifosBaseFragment implements GroupsListMvpView,
RecyclerItemClickListner.OnItemClickListener {


@BindView(R.id.lv_groups)
ListView lv_groups;
@BindView(R.id.rv_groups)
RecyclerView rv_groups;

@BindView(R.id.swipe_container)
SwipeRefreshLayout swipeRefreshLayout;

@Inject
GroupsListPresenter mGroupsListPresenter;
List<Group> groupList = new ArrayList<Group>();
List<Group> groupList = new ArrayList<>();
private GroupNameListAdapter mGroupListAdapter;
private GroupListFragment.OnFragmentInteractionListener mListener;
private View rootView;
private Context context;
private int offset = 0;
private int limit = 200;
private int index = 0;
private int top = 0;

private LinearLayoutManager layoutManager;
private int totalFilteredRecords = 0;
private int limit = 100;
private boolean isInfiniteScrollEnabled = true;


public GroupsListFragment() {

}
Expand All @@ -83,6 +83,18 @@ public static GroupsListFragment newInstance(List<Group> groupList, boolean
return groupListFragment;
}

@Override
public void onItemClick(View childView, int position) {
Intent groupActivityIntent = new Intent(getActivity(), GroupsActivity.class);
groupActivityIntent.putExtra(Constants.GROUP_ID, groupList.get(position).getId());
startActivity(groupActivityIntent);
}

@Override
public void onItemLongPress(View childView, int position) {

}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand All @@ -97,83 +109,59 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
rootView = inflater.inflate(R.layout.fragment_groups, container, false);
setToolbarTitle(getResources().getString(R.string.groups));
setHasOptionsMenu(true);
context = getActivity().getApplicationContext();


ButterKnife.bind(this, rootView);
mGroupsListPresenter.attachView(this);

layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rv_groups.setLayoutManager(layoutManager);
rv_groups.addOnItemTouchListener(new RecyclerItemClickListner(getActivity(), this));
rv_groups.setHasFixedSize(true);

swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
//Do Nothing For Now
swipeRefreshLayout.setRefreshing(false);
fetchGroupList();
}
});

fetchGroupList();

return rootView;
}

public void inflateGroupList() {

mGroupListAdapter = new GroupNameListAdapter(context, groupList);
lv_groups.setAdapter(mGroupListAdapter);
lv_groups.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

Intent groupActivityIntent = new Intent(getActivity(), GroupsActivity.class);
groupActivityIntent.putExtra(Constants.GROUP_ID, groupList.get(i).getId());
startActivity(groupActivityIntent);

}
});

mGroupListAdapter = new GroupNameListAdapter(getActivity(), groupList);
rv_groups.setAdapter(mGroupListAdapter);

if (isInfiniteScrollEnabled) {
setInfiniteScrollListener(mGroupListAdapter);
setInfiniteScrollListener();
}


}

public void fetchGroupList() {
if (groupList.size() > 0) {
inflateGroupList();
} else {
mGroupsListPresenter.loadAllGroup();
}
totalFilteredRecords = 0;
mGroupsListPresenter.loadAllGroup();
}

public List<Group> getGroupList() {
return groupList;
}

public void setGroupList(List<Group> groupList) {
this.groupList = groupList;
}

public void setInfiniteScrollListener(final GroupNameListAdapter groupListAdapter) {
public void setInfiniteScrollListener() {

lv_groups.setOnScrollListener(new AbsListView.OnScrollListener() {
rv_groups.setOnScrollListener(new EndlessRecyclerOnScrollListener(layoutManager) {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
public void onLoadMore(int current_page) {
Toaster.show(rootView, "Loading More Clients");
mGroupsListPresenter.loadMoreGroups(groupList.size(), limit);

}

@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int
visibleItemCount, int totalItemCount) {

if (firstVisibleItem + visibleItemCount >= totalItemCount) {

offset += limit + 1;
//Load More Groups
mGroupsListPresenter.loadMoreGroups(offset, limit);
}
}
});

}

public void setInfiniteScrollEnabled(boolean isInfiniteScrollEnabled) {
Expand All @@ -182,18 +170,23 @@ public void setInfiniteScrollEnabled(boolean isInfiniteScrollEnabled) {

@Override
public void showGroups(Page<Group> groupPage) {
totalFilteredRecords = groupPage.getTotalFilteredRecords();
groupList = groupPage.getPageItems();
inflateGroupList();
if (swipeRefreshLayout.isRefreshing())
swipeRefreshLayout.setRefreshing(false);
}

@Override
public void showMoreGroups(Page<Group> groupPage) {
groupList.addAll(groupPage.getPageItems());
mGroupListAdapter.notifyDataSetChanged();
index = lv_groups.getFirstVisiblePosition();
View v = lv_groups.getChildAt(0);
top = (v == null) ? 0 : v.getTop();
lv_groups.setSelectionFromTop(index, top);
swipeRefreshLayout.setRefreshing(false);

//checking the response size if size is zero then show toast No More
// Clients Available for fetch
if (groupPage.getPageItems().size() == 0 && (totalFilteredRecords == groupList.size()))
Toaster.show(rootView, "No more clients Available");
}

@Override
Expand Down
7 changes: 3 additions & 4 deletions mifosng-android/src/main/res/layout/fragment_groups.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@
android:layout_width="match_parent"
android:layout_height="match_parent">

<ListView
android:id="@+id/lv_groups"
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_groups"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_centerHorizontal="true"
android:layout_weight="4"
/>
android:layout_weight="1" />


</android.support.v4.widget.SwipeRefreshLayout>