<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.handmark.pulltorefresh.library.PullToRefreshScrollView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/pull_refresh_scrollview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ExpandableListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/black" />
<TextView
android:id="@+id/android:empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="No items"
android:textColor="@color/White" />
</com.handmark.pulltorefresh.library.PullToRefreshScrollView>
</LinearLayout>
This is my XML Layout file to which I am using the chrisbanes pull to refresh library here
For some Reason it will only show the first in the Expandable List of the Clickable items, and when I click on it it does not expand the row, I have been playing around with this and am confused as to why this is happening, here is the code for the Fragment Class
public class TestExpandFragment extends ExpandableListFragment {
private String[] divideOptions = { "Test1", "Test2", "Test3", "Test4",
"Test5", "Test6", "Test7", "Test8" };
PullToRefreshScrollView mPullRefreshScrollView;
ScrollView mScrollView;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
try {
SimpleExpandableListAdapter expListAdapter = new SimpleExpandableListAdapter(
getActivity(), createGroupList(), // Creating group List.
R.layout.group_row, // Group item layout XML.
new String[] { "1" }, // the
// key
// of
// group
// item.
new int[] { R.id.row_name }, // ID of each group item.-Data
// under the key goes into
// this TextView.
createChildList(), // childData describes second-level
// entries.
R.layout.group_child_row, // Layout for sub-level
// entries(second
// level).
new String[] { "Sub Item" }, // Keys in childData maps to
// display.
new int[] { R.id.grp_child } // Data under the keys above go
// into these TextViews.
);
setListAdapter(expListAdapter); // setting the adapter in the list.
} catch (Exception e) {
System.out.println("Errrr +++ " + e.getMessage());
}
View view = inflater.inflate(R.layout.test_expandable_fragment, container,
false);
/** Implement Pull To Refresh **/
mPullRefreshScrollView = (PullToRefreshScrollView) view
.findViewById(R.id.pull_refresh_scrollview);
mPullRefreshScrollView
.setOnRefreshListener(new OnRefreshListener<ScrollView>() {
@Override
public void onRefresh(
PullToRefreshBase<ScrollView> refreshView) {
new GetDataTask().execute();
}
});
mScrollView = mPullRefreshScrollView.getRefreshableView();
return view;
}
/* Creating the Hashmap for the row */
@SuppressWarnings("unchecked")
private List createGroupList() {
ArrayList result = new ArrayList();
for (int i = 0; i < 8; ++i) { // 8 groups........
HashMap m = new HashMap();
m.put("1", divideOptions[i]); // the key and it's value.
result.add(m);
}
return (List) result;
}
/* creatin the HashMap for the children */
@SuppressWarnings("unchecked")
private List createChildList() {
ArrayList result = new ArrayList();
for (int i = 0; i < 15; ++i) { // this -15 is the number of groups(Here
// it's fifteen)
/*
* each group need each HashMap-Here for each group we have 3
* subgroups
*/
ArrayList secList = new ArrayList();
for (int n = 0; n < 3; n++) {
HashMap child = new HashMap();
child.put("Sub Item", "Sub Item " + n);
secList.add(child);
}
result.add(secList);
}
return result;
}
public void onContentChanged() {
System.out.println("onContentChanged");
super.onContentChanged();
}
/* This function is called on each child click */
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
System.out
.println("Inside onChildClick at groupPosition = "
+ groupPosition + " Child clicked at position "
+ childPosition);
return true;
}
/* This function is called on expansion of the group */
public void onGroupExpand(int groupPosition) {
try {
System.out.println("Group exapanding Listener => groupPosition = "
+ groupPosition);
} catch (Exception e) {
System.out.println(" groupPosition Errrr +++ " + e.getMessage());
}
}
/** Sleeper for the PullToRefresh **/
private class GetDataTask extends AsyncTask<Void, Void, String[]> {
@Override
protected String[] doInBackground(Void... params) {
// Simulates a background job.
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
return null;
}
@Override
protected void onPostExecute(String[] result) {
// Do some stuff here
// Call onRefreshComplete when the list has been refreshed.
mPullRefreshScrollView.onRefreshComplete();
super.onPostExecute(result);
}
}
}
If anyone could maybe tell me why this is Happening as it will only output the Test1 but with no action, the pull to refresh will be there on load, and if I take away the pull to refresh, it does work, and I have used it surrounding other types of Layouts before with other code and have never come across this, maybe it’s something silly, I’m not sure, but I figured maybe someone could see the problem quicker.
I’ve never used that library, but in general you can’t put a
ListViewinside aScrollView(think about it). Looking at the library classes though, you should try to use thePullToRefreshExpandableListViewinstead.