如何在屏幕旋转后强制Gridview不重新加载适配器

时间:2014-01-15 06:08:58

标签: android gridview android-adapter baseadapter

每次旋转手机屏幕时,都会重新加载gridview的适配器。

我的清单上有这个(android:configChanges =“orientation | keyboardHidden | keyboard | screenSize”),我知道它应该正常工作:不调用oncreate()(通常设置适配器)并调用onConfigurationChanged(我只有一个简单的Toast进行验证)。

问题是,我不知道从哪里(方法,活动,进程等),每当我旋转手机时,适配器被调用,使用,重置并重新加载到gridview。

我只需要找到一种方法,只在onCreate()中设置适配器,当首次创建活动时......手机旋转时不会发生任何事情......这就是......

对于没有gridviews的其他活动我使用相同的东西,并且它完美地工作,只使用上面显示的清单代码....

任何帮助深深感激......

2 个答案:

答案 0 :(得分:0)

请尝试添加“screenSize”属性,如下所示:

<activity
    android:name=".YourActivityName"
    android:configChanges="orientation|screenSize">
</activity>

答案 1 :(得分:0)

我认为问题出在您的Adapter类上。 尝试使用此代码:

Inside Activity onCreate方法:

GridView grid = (GridView) findViewById(R.id.gridView);
grid.setAdapter(new Adapter(this));

Adapter.java

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class Adapter extends BaseAdapter {

private Context mContext;
private LayoutInflater mInflator;

public Adapter(Context context) {

    this.mContext = context;
    mInflator = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

@Override
public int getCount() {
    return 10;
}

@Override
public Object getItem(int arg0) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

static class ViewHolder {

    private TextView appLable;
    private ImageView appICon;

}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    View view = null;
    if (convertView == null) {
        final ViewHolder vHolder = new ViewHolder();
        view = mInflator.inflate(R.layout.item, null);
        vHolder.appLable = (TextView) view.findViewById(R.id.lable);
        vHolder.appICon = (ImageView) view.findViewById(R.id.icon);
        view.setTag(vHolder);

    } else {
        view = convertView;

    }

    ViewHolder holder = (ViewHolder) view.getTag();
    holder.appLable.setText("position " + position);

    return view;
}
}

将其置于清单活动标记内:

android:configChanges="orientation" 

希望它会对你有所帮助:)。