TableRow Text在Android上旋转屏幕后查看内容错误

时间:2014-08-02 10:41:32

标签: android textview android-tablelayout

我在片段中有一个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++;
    }
}

首次创建我的活动(仅包含此片段) 我有很好的输出: enter image description here 但轮换后: enter image description here

但最糟糕的是,日志是正确的!

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());
    }

我对如何修复它的想法?

3 个答案:

答案 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且值为最后一行的所有视图。