我得到了一个ViewPager2
适配器,其中包含2EditText
和2TextView
。开始时,EditTexts是可见的,而Textviews则消失了。如果我点击一个按钮,如果在1个(或两者)EditText中写的是好答案,则专用EditText被设置为gone,而Textview(显示答案)现在被设置为visible。问题是这些可见性更改没有保存,当我退出并回到这个Viewpager时,Textviews没有了,EditText也可见了,就好像什么都没发生一样。
我尝试使用saveInstanceState
,但由于EditTexts只在适配器中定义,在我看来这不是解决方案。
这就是为什么我尝试使用sharedpreference
,但我并不真正知道它在适配器内部是如何工作的,并且在启动它时会出现错误。我试图保存布尔值内部可见性的变化,就像我在其他程序中看到的那样。错误:
error: missing return statement
}
error: unreachable statement
artistetextVisibility = preferences.getBoolean("Atextvisibility", false);
下面是我的代码:
public class viewpageradapter_rap_level1 extends RecyclerView.Adapter<viewpageradapter_rap_level1.ViewHolder> {
private List<Integer> mimages;
private LayoutInflater mInflater;
private ViewPager2 viewPager2;
private List<String> artistetext;
private List<String> titretext;
private boolean artistetextVisibility, titretextVisibility, artisteVisibility, titreVisibility;
Context context;
SharedPreferences preferences = context.getSharedPreferences("MyPref", MODE_PRIVATE);
viewpageradapter_rap_level1(Context context, ViewPager2 viewPager2, List<Integer> images,int position, List<String> artistetext, List<String> titretext) {
this.mInflater = LayoutInflater.from(context);
this.mimages = images;
this.viewPager2 = viewPager2;
this.artistetext= artistetext;
this.titretext= titretext;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.viewpager_content_rap_level1, parent, false);
return new ViewHolder(view);
artistetextVisibility = preferences.getBoolean("Atextvisibility", false);
titretextVisibility = preferences.getBoolean("Ttextvisibility", false);
artisteVisibility = preferences.getBoolean("Avisibility", true);
titreVisibility = preferences.getBoolean("Tvisibility", true);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.gridIcon.setImageResource(mimages.get(position));
holder.ArtisteTexts.setText(artistetext.get(position));
holder.TitreTexts.setText(titretext.get(position));
}
@Override
public int getItemCount() {
return mimages.size();
}
// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder {
EditText Artiste;
Button button;
ImageView gridIcon;
EditText Titre;
TextView ArtisteTexts;
TextView TitreTexts;
ViewHolder(View itemView) {
super(itemView);
Artiste = itemView.findViewById(R.id.Artiste);
button = itemView.findViewById(R.id.btnToggle);
gridIcon = itemView.findViewById(R.id.imageView2);
Titre = itemView.findViewById(R.id.titre);
ArtisteTexts = itemView.findViewById(R.id.Artistetext);
TitreTexts = itemView.findViewById(R.id.TitreTexts);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences preferences = context.getSharedPreferences("MyPref", MODE_PRIVATE);
artistetextVisibility = preferences.getBoolean("Atextvisibility", false);
titretextVisibility = preferences.getBoolean("Ttextvisibility", false);
artisteVisibility = preferences.getBoolean("Avisibility", true);
titreVisibility = preferences.getBoolean("Ttextvisibility", true);
String ValueTitre = Titre.getText().toString();
String ValueArtiste = Artiste.getText().toString();
if (getAdapterPosition() == 0)
{
if(ValueTitre.equalsIgnoreCase("Random Access Memories"))
{
Toast.makeText(v.getContext(), "done", Toast.LENGTH_LONG).show();
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("Ttextvisibility", true);
editor.putBoolean("Tvisibility", false);
editor.commit();
Titre.setVisibility(View.GONE);
TitreTexts.setVisibility(View.VISIBLE);
}
if(ValueArtiste.equalsIgnoreCase("Daft Punk"))
{
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("Atextvisibility", true);
editor.putBoolean("Avisibility", false);
editor.commit();
Titre.setVisibility(View.GONE);
TitreTexts.setVisibility(View.VISIBLE);
}
else {
Toast.makeText(v.getContext(), "error", Toast.LENGTH_LONG).show();
}
}
}
});
}
}
在验证一个答案之后,我设法存储了布尔值,但当使用以下代码(Onclick inside Viewholder)返回活动时,它仍然不起作用:
if (getAdapterPosition() == 0)
{
if(ValueTitre.equalsIgnoreCase("Random Access Memories"))
{
Toast.makeText(v.getContext(), "Album validé!", Toast.LENGTH_LONG).show();
SharedPreferences preferences = mContext.getSharedPreferences("MyPref", MODE_PRIVATE);
preferences.edit().putBoolean("Ttextvisibility", true).commit();
preferences.edit().putBoolean("Tvisibility", false).commit();
Titre.setVisibility(View.GONE);
TitreTexts.setVisibility(View.VISIBLE);
}
我有些问题。
1)布尔值被设置为false,因为我的Textview是不可见的。我验证答案,并将其替换为True。我在viewholder中测试是否在sharedpreferences中正确地替换了布尔值,在验证后使用一个按钮检查布尔值是否等于“True”,并且每次都似乎等于“True”,甚至在我终止并再次启动应用程序时也是如此。为什么?如果我终止应用程序,所以答案从未被验证,为什么它说布尔值是True?
button_orientation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View u) {
SharedPreferences preferences = mContext.getSharedPreferences("MyPref", MODE_PRIVATE);
boolean value =preferences.getBoolean("Ttextvisibility", false);
if (value == true) {
Toast.makeText(u.getContext(), "Value", Toast.LENGTH_LONG).show();
}}
通过更改布尔值,我尝试在公共类Viewholder中更改项的可见性:
SharedPreferences preferences=mContext.getSharedPreferences(“mypref”,MODE_PRIVATE布尔值=preferences.getBoolean(“ttextVisibility”,false);
然后是在我的ViewWholder中,因为getAdapterPosition()不能单独在ViewWholder类中工作(我需要这个方法,因为它必须根据viewpager中的位置更改特定的textviews)。
ViewHolder(View itemView) {
super(itemView);
...
ArtisteTexts = itemView.findViewById(R.id.Artistetext);
TitreTexts = itemView.findViewById(R.id.TitreTexts);
if (getAdapterPosition() == 0) {
if (value == true) {
Titre.setVisibility(View.GONE);
TitreTexts.setVisibility(View.VISIBLE);
}
}
它没有改变什么,可视性设置与开始时一样....我真的迷失了,我再也不知道该怎么办了,也许是上错班了?希望任何人能帮助我…
如果您能分享您所得到的错误和其他代码,那将是很好的!:)
好的,那么:
请注意此处:
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.viewpager_content_rap_level1, parent, false);
***return new ViewHolder(view);***
artistetextVisibility = preferences.getBoolean("Atextvisibility", false);
titretextVisibility = preferences.getBoolean("Ttextvisibility", false);
artisteVisibility = preferences.getBoolean("Avisibility", true);
titreVisibility = preferences.getBoolean("Tvisibility", true);
返回后的所有内容都是不可达的,因为您已经返回了一个值并离开了方法。代码的其余部分永远不会执行
是否可以(仅仅)使用Byte-Buddy更改某些方法的可见性?我有一个带有私有静态方法的用户类,我需要将一些调用委托给这些方法,但由于它们是私有的,所以当前失败了。因此,我想知道是否可以通过添加公共修饰符来转换上述方法来重新定义user类。 对于记录,在目标Java方法上调用setAccessible(true)方法作为not effect,因为Byte Buddy仍然失败,出现以下异常: 我发现
我对viewpage er2有一个要求,在肖像上我需要显示1张完整的卡片,在风景上,我需要将其设为2,同时显示上一张和下一张卡片的边界。我如何实现它,因为使用viewpager更容易实现,但viewpage er2无法做到? 请建议一些可行的解决方案或替代方案,以获取页面宽度()我们在寻呼机上,根据设备的方向用来设置页面宽度大小
假设您正在编写一个Android项目(不是库)。所有文件都编译在一起,因此......在这种情况下使用可见性修饰符有任何意义吗?
我是Netbeans和Java的新手,对jpanels上的jlabel有一个问题。我有一个jTabbedPane,里面有一个jPanel。我在JPanel上有一个jLabel。我想将jLabel的可见性设置为false,但似乎不起作用。当我运行程序时,标签仍然可见。我不明白为什么。
我正在研究一个涉及for循环和if-else语句的java函数。我需要根据多次迭代中的条件更改标志变量的值。我声明了一个名为flag的变量,并希望根据每次迭代中的条件进行更改。我需要在每次迭代结束时打印flag变量的值。但是当我打印变量时,它显示了一个错误,变量没有初始化。如果我给它一个初始值,它会一直打印初始值,而不是在If-else语句中处理的值。我不能根据自己的要求初始化for循环中的fla
问题内容: 基本上,这是在尝试回答另一个问题时出现的。假设此代码: 我了解以下事实:这是 无序的无限流 ,要使其完成,必须进行短路操作(在这种情况下)。我也了解,在达到该限制之前,可以随意调用Stream实现多次。 在java-8下运行此命令,将始终打印(可能不总是打印,但在我的机器上是这样)。 相反,在java-10下运行this很少超过。所以我的问题是内部发生了什么变化,从而使短路发生得更好了