我有一个android片段,只在方向改变时才恢复类对象的最后一部分。我的代码如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments().containsKey(ARG_ITEM_ID)) {
// Load the weapon content specified by the fragment
mWeapon = EquipmentContent.WEAPON_MAP.get(getArguments().getString(ARG_ITEM_ID));
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.main_fragment, container, false);
// get reference to the ImageViews
weaponImageView = (ImageView) rootView.findViewById(R.id.picture);
groupImageView = (ImageView) rootView.findViewById(R.id.groupSymbol);
individualImageView = (ImageView) rootView.findViewById(R.id.individualSymbol);
// get a reference to the linear layout
statLinearLayout = (LinearLayout) rootView.findViewById(R.id.statLinearLayout);
if (mWeapon != null) {
AssetManager assets = getActivity().getAssets();
InputStream pictureStream;
InputStream groupStream;
InputStream individualStream;
try
{
// get an InputStream to the asset representing the next picture
pictureStream = assets.open("Pictures/" + mWeapon.picture + ".png");
// load the asset as a Drawable and display on the ImageView
Drawable picture = Drawable.createFromStream(pictureStream, mWeapon.picture);
weaponImageView.setImageDrawable(picture);
}
catch (IOException e)
{
Log.e("MainFragment", "Error loading " + mWeapon.picture + ".png", e);
}
try
{
// get an InputStream to the asset representing the next picture
groupStream = assets.open("Group/" + mWeapon.group + ".png");
// load the asset as a Drawable and display on the ImageView
Drawable group = Drawable.createFromStream(groupStream, mWeapon.group);
groupImageView.setImageDrawable(group);
}
catch (IOException e)
{
Log.e("MainFragment", "Error loading " + mWeapon.group + ".png", e);
}
try
{
// get an InputStream to the asset representing the next picture
individualStream = assets.open("Individual/" + mWeapon.individual + ".png");
// load the asset as a Drawable and display on the ImageView
Drawable individual = Drawable.createFromStream(individualStream, mWeapon.individual);
individualImageView.setImageDrawable(individual);
}
catch (IOException e)
{
Log.e("MainFragment", "Error loading " + mWeapon.individual + ".png", e);
}
((TextView) rootView.findViewById(R.id.item_detail)).setText(mWeapon.id); // Sets the title text of the fragment
populateStatistics(inflater);
}
return rootView;
}
public void populateStatistics(LayoutInflater inflater) {
// TODO: currently reverts all EditText views to the last input upon orientation change
if (!mWeapon.priWeapon.equals("null")) { // if the primary weapon is not null, then inflate relevant TextViews
TableLayout priWeaponIDTableLayout = (TableLayout) inflater.inflate(R.layout.statistics_text_view, null); // Weapon title statistic
statLinearLayout.addView(priWeaponIDTableLayout);
((TextView) priWeaponIDTableLayout.findViewById(R.id.category)).setText(R.string.priWeapon);
((EditText) priWeaponIDTableLayout.findViewById(R.id.statistic)).setText(String.format("%s", mWeapon.priWeapon));
TableLayout priWeaponRangeTableLayout = (TableLayout) inflater.inflate(R.layout.statistics_text_view, null); // Weapon range statistic
statLinearLayout.addView(priWeaponRangeTableLayout);
((TextView) priWeaponRangeTableLayout.findViewById(R.id.category)).setText(R.string.priMaxRange);
((TextView) priWeaponRangeTableLayout.findViewById(R.id.category)).setTypeface(null, Typeface.NORMAL);
((TextView) priWeaponRangeTableLayout.findViewById(R.id.statistic)).setTypeface(null, Typeface.NORMAL);
((EditText) priWeaponRangeTableLayout.findViewById(R.id.statistic)).setText(String.format("%s meters", mWeapon.priMaximumRange));
TableLayout priWeaponPenTableLayout = (TableLayout) inflater.inflate(R.layout.statistics_text_view, null); // Weapon penetration statistic
statLinearLayout.addView(priWeaponPenTableLayout);
((TextView) priWeaponPenTableLayout.findViewById(R.id.category)).setText(R.string.priPen);
((TextView) priWeaponPenTableLayout.findViewById(R.id.category)).setTypeface(null, Typeface.NORMAL);
((TextView) priWeaponPenTableLayout.findViewById(R.id.statistic)).setTypeface(null, Typeface.NORMAL);
((EditText) priWeaponPenTableLayout.findViewById(R.id.statistic)).setText(String.format("%s mm", mWeapon.priPenetration));
}
}
我充气和修改的自定义布局如下。
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tableLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="*">
<!-- Table Row 0 -->
<TableRow
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/tableRow0">
<TextView
android:id="@+id/category"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/priWeapon" android:textColor="#000" android:textStyle="bold"
android:layout_weight="1"
android:gravity="left"
android:padding="5dp"/>
<EditText
android:id="@+id/statistic"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/NA" android:textSize="14sp" android:textStyle="bold"
android:gravity="center"
android:focusable="false"
android:layout_weight="1"
android:cursorVisible="false"
android:longClickable="false"/>
</TableRow>
</TableLayout>
当方向改变时,几乎所有东西都会很好地加载,包括标题,图片.png,组和个人.png,武器ID和武器穿透统计。问题是武器穿透统计数据由于某种原因取代了主要武器ID和最大范围。我不确定为什么。任何帮助表示赞赏。
答案 0 :(得分:0)
我修改了我的代码并将常见的有缺陷的分母视图类型'EditText'更改为'TextView'。它现在保留了它应该的数据。由于某种原因,EditText savedInstanceState不是持久的,而是TextView。我最初使用的是EditText,因为我正在使用的Dietel书籍使用它来提供它所提供的下划线。现在我只需创建一个自定义背景来复制下划线并将其应用于XML。