我有两个布局landscape
和portrait
,其中我设置了TextView
值,如下所示:
景观:
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="5" />
肖像:
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="2" />
我正在访问TextView
这样的值:
1
public class GridFragment extends Fragment {
public static TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
tv = (TextView) rootView.findViewById(R.id.textView1);
}
}
2
public class AppConst {
public static String str = (String) GridFragment.tv.getText();
public static final int NUM_OF_COLUMNS = Integer.parseInt(str);
}
现在的问题是我只接受TextView
值的单次旋转,但如果我改变旋转视图,则值不会改变。
我想说的是,如果我在纵向模式下运行应用程序,我将获得 2列数,但如果现在将轮换从纵向更改为横向,则值现在应为5 < / strong>但值仍为 2,应该从2更改为5.
我的意思是它第一次获得价值但是当屏幕旋转时它不会改变价值。
我想要的是:当屏幕为纵向值时应为2,当屏幕为横向值时应为5。
请注意我不是在谈论在屏幕上显示值,而是在讨论将值从xml发送/传递给String。
我在谈论更改/更新此方法中的值:public static String str = (String) GridFragment.tv.getText();
public static final int NUM_OF_COLUMNS = Integer.parseInt(str);
从特定屏幕模式获取当前值。
答案 0 :(得分:1)
我认为你的问题是:
public static final int NUM_OF_COLUMNS = Integer.parseInt(str);
final
实际上意味着一旦设置它就会保持值
解决这个问题:
不要使用常量类...这是错误的approch,它取决于你想做什么。
保存Bundle savedInstanceState中的值或将数据保存在SharedPreferences
请注意,默认在方向更改上重新创建孔视图,以便执行完整的创建生命周期