/*
Copyright 2010-2012 Cesar Valiente Gordo
This file is part of QuiteSleep.
QuiteSleep is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QuiteSleep is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QuiteSleep. If not, see <http://www.gnu.org/licenses/>.
*/
package es.cesar.quitesleep.ui.fragments.base;
import java.util.List;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.actionbarsherlock.app.SherlockListFragment;
/**
*
* @author Cesar Valiente Gordo (cesar.valiente@gmail.com)
*
* This activity is used as base of list activities or (fragments) in
* along the app to have different commons features without the
* necessity to implement the same code over and over again.
*/
public abstract class BaseListFragment extends SherlockListFragment {
public ArrayAdapter<String> myOwnAdapter;
// Used to fix the index cursor when we delete items from the list
private boolean fixIndexCursor = false;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/**
* Get all defined info from the database and parse it for create one list
* only with the {@link String} info.
*
* @param dataInfoList
*/
public abstract void getDataInfo(List<String> dataInfoList);
/**
* Refreshes the list to also can use properly the indexer and fastScroll
*/
protected void refreshList() {
/*
* To refresh the indexer we need to disable the fastScroll, call to
* notifyDataSetChanged, re-create the index sections and enable again
* the fastScroll. After that call to the function which fix a problem
* with the view which shows the section index.
*/
getListView().setFastScrollEnabled(false);
myOwnAdapter.notifyDataSetChanged();
getListView().setFastScrollEnabled(true);
jiggleWidth();
}
/**
* This function fixes the known problem {@link http://code.google.com/p/
* android/issues/detail?id=9054} the patch was founded in {@link http
* ://stackoverflow.com/questions/2912082/
* section-indexer-overlay-is-not-updating-as-the-adapters-data-changes}.
*
* Is not really elegant, but it seems is the known way to fix it.
*/
private void jiggleWidth() {
ListView view = getListView();
if (view.getWidth() <= 0) {
return;
}
int newWidth = fixIndexCursor ? view.getWidth() - 1
: view.getWidth() + 1;
ViewGroup.LayoutParams params = view.getLayoutParams();
params.width = newWidth;
view.setLayoutParams(params);
fixIndexCursor = !fixIndexCursor;
}
}