我在片段中有一个TableLayout,一旦通过以下代码(简化测试)创建片段,我就会生成行:
public void displayChar(String ClassID) {
Character charac = new Character(Integer.parseInt(ClassID), getActivity());
TableLayout stanceListTable = (TableLayout) getView().findViewById(R.id.charStanceList);
stanceListTable.removeAllViews();
i=0;
for (Character.StanceCondition stanceCondition : stanceList) {
TableRow row=createTableRow(stanceCondition);
((TextView)row.findViewById(R.id.stances)).setText(Integer.toString(i));
Log.i("RowContent",((TextView)row.findViewById(R.id.stances)).getText().toString());
stanceListTable.addView(row);
i++;
}
}
首次创建我的活动(仅包含此片段) 我有很好的输出: 但轮换后:
但最糟糕的是,日志是正确的!
在
08-02 12:30:37.446 5697-5697/com.lectem.gecharacters I/RowContent﹕ 0
08-02 12:30:37.449 5697-5697/com.lectem.gecharacters I/RowContent﹕ 1
08-02 12:30:37.466 5697-5697/com.lectem.gecharacters I/RowContent﹕ 2
08-02 12:30:37.469 5697-5697/com.lectem.gecharacters I/RowContent﹕ 3
在
08-02 12:30:45.653 5697-5697/com.lectem.gecharacters I/RowContent﹕ 0
08-02 12:30:45.656 5697-5697/com.lectem.gecharacters I/RowContent﹕ 1
08-02 12:30:45.660 5697-5697/com.lectem.gecharacters I/RowContent﹕ 2
08-02 12:30:45.662 5697-5697/com.lectem.gecharacters I/RowContent﹕ 3
createTableRow方法:
public TableRow createTableRow(Character.StanceCondition stanceCondition) {
TableRow row =(TableRow) ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.stance_list_row,null);
TextView hands=(TextView)row.findViewById(R.id.stanceHands);
hands.setText(stanceCondition.RHand + stanceCondition.LHand);
TextView stancesView =(TextView)row.findViewById(R.id.stances);
MovementMethod movementMethod = stancesView.getMovementMethod();
if ((movementMethod == null) || !(movementMethod instanceof LinkMovementMethod))
{
stancesView.setMovementMethod(LinkMovementMethod.getInstance());
}
Log.i("row","creating row");
SpannableString finalss=new SpannableString("");
/*Should be creating my spannable string here with links, but I simplified the code and changed the text after creation of the row*/
stancesView.setText(finalss);
return row;
}
当getText方法返回好内容时,为什么会显示错误的文本...而第一个TextView具有良好的文本。 这真是让我发疯,有什么问题?
编辑: 这是我活动的onCreate函数:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_char_details);
ClassID = getIntent().getExtras().getString("ClassID");
mDetailsFragment = (CharDetailsFragment) getSupportFragmentManager().findFragmentById(
R.id.charDetails);
mDetailsFragment.displayChar(ClassID);
}
对于我的片段:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_char_details, container, false);
}
编辑2:
问题似乎来自
MovementMethod movementMethod = stancesView.getMovementMethod();
if ((movementMethod == null) || !(movementMethod instanceof LinkMovementMethod))
{
stancesView.setMovementMethod(LinkMovementMethod.getInstance());
}
我对如何修复它的想法?
答案 0 :(得分:0)
在xml中的 textview 上尝试 android:freezesText =" true" ,这可以解决您的问题。
答案 1 :(得分:0)
所以我找到了一个" anwser"对我的问题,虽然如果有人能够准确地解释它为什么有效,我会接受他的回答。
我只是通过片段的onStart方法调用displayChar方法。似乎在调用onClose时,LinkMovementMethod会出错。因此,使用OnStart重新生成TextViews似乎可行。
答案 2 :(得分:0)
问题是每行中的所有TextView's
都具有相同的ID。因此,当保存每行的保存实例状态时,它将覆盖上一行的保存状态,最后保存最后一行的状态。然后,当状态恢复时,它会填充ID为R.id.stances
且值为最后一行的所有视图。