【问题标题】:Programatically make LinearLayout dismissible in android studio using shared preference使用共享首选项以编程方式使 LinearLayout 在 android studio 中消失
【发布时间】:2021-07-11 03:52:40
【问题描述】:

有一个我想要实现的事情,我搜索了关于 SO 的所有问题,但没有与此相关的答案,所以我想没有人问这让我感到好奇。

在我的 XML,Android studio 应用上,我添加了一个线性布局,在线性布局下,我添加了一个《TextView with text "Dismiss"》。

我想为此 textview 设置一个 onclick 侦听器,一旦用户单击带有文本“Dismiss”的 TextView,我不希望该用户在重新安装应用程序之前再次在页面上看到该线性布局。

从逻辑上讲,线性布局就像是在用户到达该页面时突出显示我的应用程序上的某些内容的通知,但我希望用户能够将其关闭,而不是永远留在那里,这表明他们已经获得注意。

我的工作:

  1. 由于我希望每个应用用户在单击关闭后决定不再看到该文本,因此我需要在该 TextView 上使用带有文本“关闭”的共享首选项,因此每当应用获取此共享首选项的值时,它将隐藏那个布局。
  2. 如果在应用程序中找到来自共享首选项的值,我可以将 LinearLayout 设置为不可见
  3. 现在的问题是,如果单击带有文本“Dismiss”的 TextView,我将如何设置此共享首选项以及我将使用哪个代码使布局“GONE”或“INVISIBLE”?

我们将非常感谢您对此的智能解决方案。

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    检查一下,它是用 Java 编写的,这将在单击 dismisstextview 后隐藏布局,当你重新打开它时,警报仍然会被隐藏。

    public class MainActivity extends AppCompatActivity {
    
        SharedPreferences sharedPref;
        SharedPreferences.Editor editor;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            sharedPref = getSharedPreferences(getApplicationContext().getPackageName(),0);
            editor = sharedPref.edit();
    
            LinearLayout alertLayout = (LinearLayout)findViewById(R.id.alertLayout);
            TextView textViewDismiss = (TextView)findViewById(R.id.textViewDismiss);
    
            if(sharedPref.getBoolean("isLayoutAlertShown",false)){
                alertLayout.setVisibility(View.GONE);
            }else{
                alertLayout.setVisibility(View.VISIBLE);
            }
    
            textViewDismiss.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    alertLayout.setVisibility(View.GONE);
                    editor.putBoolean("isLayoutAlertShown",true);
                    editor.apply();
                }
            });
    
        }
    }
    

    【讨论】:

    • 感谢您的回答,我应该使用什么来初始化共享首选项,是“Private SharedPreferences sharedPref;”吗?在导入下添加,或者......我应该将第一块代码放在哪里,它是在 oncreate 内部还是外部?
    • @Karmar 'Private SharedPreferences sharedPref;'应该在 Oncreate 方法之前的类里面,其他的都应该在 OnCreate 方法里面,这也是 Kotlin 代码,如果你使用 Java,别忘了把它转换成 Java 代码
    • 我的代码是java的,你能提供java的解决方案吗,我尝试转换但是使用android studio转换工具出现错误,请帮助
    • @Karmar,我编辑了代码并从 Kotlin 更改为 Java,并添加了完整的 Activity Java 类代码,希望对您有所帮助:)
    • ? 我不知道我会对聪明的你做什么。谢谢你帮助我。
    【解决方案2】:

    我建议您使用SharedPreferences,因为这与设置问题有关。你可以参考这个链接:https://developer.android.com/training/data-storage/shared-preferences#java

    您必须在onCreate 调用此方法。所以它会检查是否有showLayout 声明truefalse,然后它会更新设计。

    //Inside onCreate
    private void initSharedPreference(final Activity activity, final LinearLayout linearLayout) {
        final SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
        if (sharedPref.getBoolean("showLayout", false)) {
            linearLayout.setVisibility(View.GONE);
        } else {
            linearLayout.setVisibility(View.VISIBLE);
        }
    }
    

    setOnClickListener你需要实现这个方法。

    //At the button
    private void setSharedPrefShowLayout(final Activity activity, final Boolean isVisible) {
        final SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
        final SharedPreferences.Editor editor = sharedPref.edit();
        editor.putBoolean("showLayout", isVisible);
        editor.apply();
    }
    

    【讨论】:

    • 你好,我把第一个代码放在setContentView之后。 ("final Activity Activity",开闭括号有红色标记,错误显示';'expected 中间final 说Identifier expectes,怎么办?谢谢
    • No.. 我的意思是该方法在类内部。调用onCreate 中的方法。你明白吗? @Karmar
    • 还是报错,看截图上的位置snipboard.io/rgRSXv.jpg
    • 你放错了。将其放在onCreate 之外。在onCreate@Karmar 内调用它
    • 谢谢,既然你在oncreate外面说了,就清楚了,没有错误,但是在oncreate里面我应该用什么方法调用呢?比如应该添加哪一行代码来调用你创建的这段代码?非常感谢您的帮助,感谢您的调查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多