我试图在屏幕旋转后滚动到所选位置但没有发生任何事情。 我已经尝试了很多建议,但没有一个是有效的(setSelection,自己的平滑滚动......)
public class MovieFragment extends Fragment {
// The customised movie adapter
private MovieAdapter mMovieAdapter;
private GridView mGridView;
private static final String SELECTED_POSTER = "stored_position";
private int mPosition = GridView.INVALID_POSITION;
public interface Callback {
/**
* DetailFragmentCallback for when an item has been selected.
*/
void onItemSelectedNormal (Movie movie);
}
public MovieFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/**
* Function that makes an Async call for the fetch function while passing the sort criteria from the shared preferences.
*/
public void updateMovies (String sortCriteria) {
FetchMoviesTask fmt = new FetchMoviesTask(getActivity(), mMovieAdapter);
fmt.execute(sortCriteria);
}
@Override
public void onStart() {
super.onStart();
}
public void onSortChange () {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
String sortCriteria = prefs.getString(getString(R.string.pref_criteria_key), getString(R.string.pref_criteria_default));
updateMovies(sortCriteria);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mMovieAdapter = new MovieAdapter(getActivity(), new ArrayList<Movie>());
View rootView = inflater.inflate(R.layout.fragment_movie, container, false);
mGridView = (GridView) rootView.findViewById(R.id.gridview_movie);
mGridView.setAdapter(mMovieAdapter);
// Handle a click on a poster.
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Movie movie = mMovieAdapter.getItem(i); // Get the movie object at the appropriate position.
((Callback) getActivity()).onItemSelectedNormal(movie);
mPosition = i;
}
});
if (savedInstanceState != null && savedInstanceState.containsKey(SELECTED_POSTER)) {
mPosition = savedInstanceState.getInt(SELECTED_POSTER);
}
//onSortChange();
return rootView;
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (mPosition != GridView.INVALID_POSITION){
outState.putInt(SELECTED_POSTER, mPosition);
}
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
if (mPosition != GridView.INVALID_POSITION) {
mGridView.smoothScrollToPosition(mPosition);
}
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
onSortChange();
}
}
这是我的适配器:
public class MovieAdapter extends ArrayAdapter<Movie> {
private static final String LOG_TAG = MovieAdapter.class.getSimpleName();
public MovieAdapter(Activity context, ArrayList<Movie> movies) {
super(context, 0, movies);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Gets the Movie object from the ArrayAdapter at the appropriate position
Movie movie = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.movie_poster, parent, false);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.poster_view);
Picasso.with(convertView.getContext()).load(movie.getImageURL()).into(imageView);
return convertView;
}
}
我的片段布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- TODO: Update blank fragment layout -->
<GridView
android:id="@+id/gridview_movie"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:verticalSpacing="0dp"
android:horizontalSpacing="0dp"
android:numColumns="auto_fit"
style="@style/MovieGridStyle"
android:stretchMode="columnWidth" />
<TextView
android:id="@+id/no_data_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/empty_fav_list"
android:visibility="invisible"
android:gravity="center"
android:textColor="#bfafaf"
android:textSize="25sp" />
</RelativeLayout>
我的图片布局,名为movie_poster:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10sp"
android:background="@drawable/touch_selector">
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:id="@+id/poster_view"
android:adjustViewBounds="true"/>
</FrameLayout>