【问题标题】:How to force a Gridview to NOT reload the adapter after screen rotation如何在屏幕旋转后强制 Gridview 不重新加载适配器
【发布时间】:2014-01-15 06:08:57
【问题描述】:

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

我的清单上有这个(android:configChanges="orientation|keyboardHidden|keyboard|screenSize"),我知道它可以正常工作:未调用 oncreate()(通常设置适配器的位置)并且调用了 onConfigurationChanged(我只有一个简单的祝酒词进行验证)。

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

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

我在其他没有网格视图的活动中使用相同的东西,并且它完美地工作,只需使用上面显示的清单代码......

非常感谢任何帮助...

【问题讨论】:

标签: android gridview android-adapter baseadapter


【解决方案1】:

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

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

【讨论】:

  • 自己处理配置更改会使使用替代资源变得更加困难,因为系统不会自动为您应用它们。当您必须避免由于配置更改而重新启动并且不建议用于大多数应用程序时,应将此技术视为最后的手段。developer.android.com/guide/topics/resources/…
  • 是的!请提出问题的可能解决方案,它也将有助于我们所有人的学习!
  • 解决方案在主题在方向更改期间保留对象配置下提供的链接中
  • 谢谢 Jitesh,已经在使用它了……我还是把它改成了这两个,结果一样……
  • Raghunandan,请检查您的链接,404 错误,找不到文件...谢谢。
【解决方案2】:

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

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" 

希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多