如何在更改屏幕方向android时保留回收器视图的选定项目?

2024-04-25

我想在屏幕方向改变时保留 RecyclerView 所选项目的状态,但每当我更改方向时,所选项目不会保留其状态。
所以我保存所选项目的位置和方向变化onResume().
我获取了位置,并通过使用 RecyclerView 的 getChildAt() 方法尝试获取该项目的视图,但它返回 null。

我遇到了严重的麻烦,请帮助。

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        SelectedMyPosition= savedInstanceState.getInt("selectedItemPosition");
        check=savedInstanceState.getString("demo");
    }
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.tool_bar);
    setSupportActionBar(toolbar);

    objectRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView);
    objectRecyclerView.setHasFixedSize(true);
    objectRecyclerView.setItemAnimator(new DefaultItemAnimator());


    mAdapter = new MyAdapter(TITLES, ICONS, NAME, EMAIL, PROFILE, this,SelectedMyPosition);

    mlayoutmanager = new LinearLayoutManager(this);

    objectRecyclerView.setLayoutManager(mlayoutmanager);
    objectRecyclerView.setAdapter(mAdapter);

 @Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    if (SelectedMyPosition >= 0) {
        View v=objectRecyclerView.getChildAt(SelectedMyPosition);
        if(v!=null)
        {
            v.setSelected(true);
        }
            View lay=mlayoutmanager.getChildAt(SelectedMyPosition);  
            Toast.makeText(getApplicationContext(), "htrfgrg" + SelectedMyPosition+check+v+lay,
                    Toast.LENGTH_SHORT).show();

    }

}
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stubel
        outState.putInt("selectedItemPosition", SelectedPosition);
        outState.putString("demo", "honey");

        super.onSaveInstanceState(outState);
    }

适配器类:

public class MyAdapter extends Adapter<MyAdapter.ViewHolder>  {
    private String[] mTitles;
    private int[] mIcons;
    private String mName;
    private String mEmail;
    private int mProfile;
    private static final int TYPE_ITEM = 1;
    private static final int TYPE_HEADER = 0;
    static Context c;
    int selectedpos;
    ViewGroup mrecycerView;
    View old;
static  int count=0;

    /* View Holder Class Start */


    public class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener  {
        int Holderid;

        TextView textView;
        ImageView imageView;
        ImageView profile;
        TextView Name;
        TextView email;
        Context mcontext;


        public ViewHolder(View itemView, int viewType,Context con) {
            // TODO Auto-generated constructor stub

            super(itemView);
            mcontext=con;

            itemView.setOnClickListener(this);

            if (viewType == TYPE_HEADER) {
                Name = (TextView) itemView.findViewById(R.id.name);
                email = (TextView) itemView.findViewById(R.id.email);
                profile = (ImageView) itemView.findViewById(R.id.circleView);
                Holderid = 0;
            } else if (viewType == TYPE_ITEM) {
                textView = (TextView) itemView.findViewById(R.id.rowText);
                imageView = (ImageView) itemView.findViewById(R.id.rowIcon);
                Holderid = 1;
            }
        }

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            if(count>0 && old!=null)
            {

                old.setSelected(false);
            }
            old=v;
            v.setSelected(true);
            count++;
            MainActivity.getPositionOfItem(getLayoutPosition(),v);
            Intent i = new Intent(mcontext.getApplicationContext(),NewActivity.class);

            mcontext.startActivity(i);
            Activity activity = (Activity)mcontext;
            activity.overridePendingTransition(R.anim.pull_in_from_left, R.anim.hold);


            Toast.makeText(MyAdapter.c,"hiji" + getLayoutPosition(), Toast.LENGTH_SHORT).show();
        }
    }

    /* View Holder Class End */
    public MyAdapter(String[] tITLES, int[] iCONS, String nAME, String eMAIL,
            int pROFILE, Context applicationContext,int selectedPos) {
        // TODO Auto-generated constructor stub
        mTitles = tITLES;
        mIcons = iCONS;
        mName = nAME;
        mEmail = eMAIL;
        mProfile = pROFILE;
        c=applicationContext;
        this.selectedpos=selectedPos;
    }

    @Override
    public int getItemCount() {
        // TODO Auto-generated method stub
        return mTitles.length -2;
    }

    @Override
    public int getItemViewType(int position) {
        // TODO Auto-generated method stub
        if (position == 0) {
            return TYPE_HEADER;
        } else {
            return TYPE_ITEM;
        }

    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        if(position==selectedpos)
        {

        }
        if (holder.Holderid == 0) {
            holder.profile.setImageResource(mProfile);
            holder.Name.setText(mName);
            holder.email.setText(mEmail);

        } else if (holder.Holderid == 1) {
            holder.textView.setText(mTitles[position -1 ]);

            holder.imageView.setImageResource(mIcons[position -1 ]);
        }
        // TODO Auto-generated method stub

    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // TODO Auto-generated method stub
        mrecycerView=parent;

        if (viewType == TYPE_HEADER) {
        View    v = LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.header, parent, false);
            ViewHolder vh = new ViewHolder(v, viewType,c);
            return vh;
        } else if (viewType == TYPE_ITEM) {
        View     v = LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.items_row, parent, false);
            ViewHolder vh = new ViewHolder(v, viewType,c);
            return vh;
        }
        return null;
    }
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在更改屏幕方向android时保留回收器视图的选定项目? 的相关文章

  • 如何获取之前的碎片?

    为了在我的应用程序中重用某些片段 我需要知道哪个片段是返回堆栈上的第二个片段 为了做到这一点 我正在使用getFragmentManager getFragments 显示以下错误 但有效 FragmentManager getFragme
  • 使用 google Directions API 的地图视图绘制方向 - 解码折线

    我正在尝试使用 Google 方向 API 在我的地图视图上显示方向 但我在从 JSON 响应获取数据时遇到困难 我可以获得 级别 和 点 字符串 但无法弄清楚如何将它们解码为地图上的点 任何帮助将非常感激 我有一个类可以为您解码它们 添加
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • Manifest Merger工具:替换失败

    我正在使用一个使用自己的 android theme 的库 因此在构建时收到以下错误 错误 55 9 任务 contacit processDebugManifest 执行失败 清单合并失败 AndroidManifest xml 中的属性
  • FTS3 在 ORMLite 中搜索?

    我对 FTS3 一无所知 除了http developer android com guide topics search search dialog html http developer android com guide topics
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • Android 自定义布局 - onDraw() 永远不会被调用

    public class MainActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate savedI
  • Android Library项目使用gradle在命令行编译时无法导入另一个库项目的R类

    我的 android 项目有这样的结构 ProjectDir settings gradle MyApp depends on LibraryA and LibraryB gt build gradle gt All the other a
  • AudioTrack、SoundPool 或 MediaPlayer,我应该使用哪个?

    如果我需要能够 播放多个音频文件 具有不同的持续时间 例如 5 到 30 秒 独立设置右 左声道的音量 应用声音效果 如混响 失真 那么 我应该使用哪个 API 另外 我在 AudioTrack API 上找不到太多文档 有谁知道在哪里可以
  • 如何在手机缓存中保存用户名和密码

    我有一个用户登录应用程序 它需要用户的电子邮件和密码 我想将电子邮件和密码保存在手机缓存中 以便用户不必再次输入 有什么办法可以将数据保存在Android缓存中吗 我认为你需要使用SharedPreference用于在设备中使用应用程序时保
  • 如何在 Android 模块中使用 FirebaseAuth

    我正在开发一个聊天库 我想在其中显示登录用户的对话 制作该库的原因是我想将其集成到多个项目中 我现在面临的问题是FirebaseAuth表示用户尚未登录 FirebaseAuth getInstance mFirebaseApp getCu
  • Android 相机未保存在特定文件夹 [MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA]

    当我在 Intent 中使用 MediaStore INTENT ACTION STILL IMAGE CAMERA 时遇到问题 相机正常启动 但它不会将文件保存在我的特定文件夹 photo 中 但是当我使用 MediaStore ACTI
  • Android 后台服务示例,具有交互式调用方法

    我不是 Android 方面的专家 我正在寻找一个 Android 应用程序的示例 该应用程序使用一个服务 其中有真正的功能方法 或者换句话说 一个服务可以用来做什么 我们什么时候需要它 超越简单的东西服务举例 我确信您渴望获得一些工作代码
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • Android:RecyclerView 不显示片段中的列表项

    有人可以帮我尝试让我的 RecyclerView 出现吗 如果我不在片段中实现它 就会出现这种情况 然而 当我尝试将其实现到片段中时 CarFront 中的其他 XML 代码与 RecyclerView 分开显示 我的日志中收到此错误 E
  • 错误:无法创建新会话,因为找不到需要 HttpClient、InputStream 和 long 的“createSession”

    我正在尝试自动化 Android 混合应用程序 但出现以下错误 1 线程 main org openqa selenium WebDriverException中出现异常 无法创建新会话 因为未找到需要 HttpClient InputSt
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择

随机推荐

  • Azure Functions 数据库连接字符串

    如何添加或访问app configAzure 函数中的文件添加数据库连接字符串 如果你不应该添加app config并且有更好的方法来访问外部数据库来执行该功能 请让我知道最佳实践 谢谢 Jan V almost钉住了它 这促使我在loca
  • Retrofit 是否在主线程上进行网络调用?

    我正在尝试在 Android 上探索 Retrofit OkHttp 这是我在网上找到的一些代码 RestAdapter restAdapter new RestAdapter Builder setExecutors executor e
  • 通过列名动态访问游标

    我可以动态访问游标的列吗 我的意思是名字 像这样的东西 declare v cursor select from emp begin FOR reg IN v cursor LOOP dbms output put line reg col
  • 如何知道 ASP.net 是哪个版本?

    通过查看ASP NET项目 我们如何知道它内置的是哪个版本的ASP NET 有人可以列出识别版本的不同方法吗 谢谢 您需要小心此处使用的方法 因为 ASP NET 下的 NET 框架的某些更新似乎会在以前的版本号下运行 例如 ASP NET
  • 重写后.htaccess图像不显示

    我有一个问题 URL 已被这样重写 RewriteEngine on RewriteCond REQUEST URI index php RewriteRule index php test 1 NC L 我的图像和 CSS 样式都没有被应
  • VB.NET Custom Control(自定义绘图)刷新问题

    我用两个项目创建了一个简单的解决方案 第一个项目 类库 包含一个名为 Container 的自定义控件 它用圆角绘制自身 第二个项目 Windows 窗体 是一个测试应用程序 如果我在第二个项目的主窗体中添加一个容器实例 它会很好地显示圆角
  • Rails,为什么连接返回具有非唯一值的数组?

    我使用 Rails 3 为例 但我相信 Rails 2 3 也是如此 假设 我有一个有很多位置的模型城市 我尝试寻找有地点的城市 我使用以下代码 City joins locations 但输出数组是 gt
  • 如何对arraylist进行一系列排序操作(多个排序条件)

    我有一个对象数组列表 我想在此列表上运行一系列排序操作 例如 我想首先按名称对它们进行排序 如果两个名称相同 则按 id 对它们进行排序 我怎样才能实现它 这是我的代码 Comparator
  • MacVim 中的 Inconsolata 斜体

    我正在尝试使用 Inconsolata 作为 MacVim 中的字体 但我似乎找不到斜体版本 我使用的是日晒配色方案 它应该使注释斜体化 并且它适用于字体书中具有斜体或倾斜版本的字体 有没有办法以某种方式 制作 斜体版本 是不是有什么文件我
  • Python win32com - 自动化 Word - 如何替换文本框中的文本?

    我正在尝试使用 Python 自动化 Word 来替换 Word 文档中的文本 如果重要的话 我使用的是 word 2003 和 Python 2 4 下面我的替换方法的第一部分适用于除文本框中的文本之外的所有内容 文本只是没有被选择 我注
  • 将数组映射到 Symfony2/Doctrine2 中的实体

    我正在使用 DoctrineFixtures 包在开发过程中创建示例实体 在我的 ORM 装置 load 方法中 我将数据定义为关联数组并在循环中创建实体对象
  • 用于匹配编号大于的类的 CSS 选择器

    我有一个使用 Sencha Touch 2 开发的移动混合应用程序 需要根据其运行的 iOS 版本进行一些自定义 我的 Sass 样式表中曾经有以下选择器 x ios 7 put here iOS7 customizations 现在 iO
  • 换行符 unicode 字符

    我想要一个可用于表示新行的 Unicode 字符 我以前见过它 但通过我尝试过的任何谷歌搜索都找不到它 它看起来像这样 lt 有几种可能性 选择也可能取决于字体 因为并非所有字体都适用于所有字体 并且其中一些具有相当不同的形状 并且有些在小
  • 类型错误:无法读取 null 的属性(读取“useRef”)

    我正在使用 Next js TypeScript sanity 和 tailwindcss 我尝试使用react hook form 但收到错误 我试过了 改变Post函数到箭头函数 改变Post函数到 const 函数 改变IFormIn
  • Gradle fileTree 排除除某些目录之外的所有目录

    我正在使用 fileTree 实用程序来获取文件列表 但需要排除除列表中选定的几个目录之外的所有目录 我的目录结构 node modules react native react third party package another pa
  • 如何将颜色条添加到已有的绘图图形中?

    我有以下图表 其数据 位置和颜色值 来自外部源 import plotly graph objs as go from plotly offline import init notebook mode iplot data go Scatt
  • 如何读取箭头镶木地板键值元数据?

    当我在 R 和 Python 中保存 parquet 文件 使用 pyarrow 时 我得到一个保存在元数据中的箭头模式字符串 如何读取元数据 是Flatbuffer编码的数据吗 模式的定义在哪里 它没有在箭头文档网站上列出 元数据是一个键
  • 错误:“主机标识符中存在双冒号”

    我正在尝试连接到我在 MLab 托管的数据库 我正在使用 StrongLoop API 我已将托管数据库的配置信息放入 datasources json 和 config json 文件中 但每当我使用以下命令运行目录时npm start
  • 是否存在用于将 C++ 代码移植到 64 位的自动转换工具?

    我正在研究将大量 gt 10M 行 C 代码移植到 64 位的方法 我已经研究了静态代码分析器和编译器标志 现在正在研究可以进行常见的重复更改的宏或其他工具 我写了一些正则表达式来看看它们在实践中的效果如何 正如预测的那样 它们非常有效 也
  • 如何在更改屏幕方向android时保留回收器视图的选定项目?

    我想在屏幕方向改变时保留 RecyclerView 所选项目的状态 但每当我更改方向时 所选项目不会保留其状态 所以我保存所选项目的位置和方向变化onResume 我获取了位置 并通过使用 RecyclerView 的 getChildAt