11

我正在使用Viewpager3 之间切换fragments,一切正常,除了第二个选项卡(或fragment)的刷新。在这个选项卡中,我有一张图片、一些静态Textviews、一些动态TextViews和一些EditText字段。

每次选择第二个选项卡时,都会调用setText()所有动态字段。TextView 组件和微调器正在刷新和更新其内容,但 EditText 元素不会。我不明白为什么这些字段没有更新。标签更改后,我调用notifiyDataSetChanged(). 每次我更改标签时TabsAdapter它都会调用。onViewCreated()onViewCreated()第二个片段中,我正在更改元素的内容。

这是我的片段的代码:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


    hA = (HelloAndroidActivity)this.getSherlockActivity();
    appState = ((TestApplication)this.getSherlockActivity().getApplicationContext());
    final PersistenceHelper pH = new PersistenceHelper(appState);
    m = pH.readMitarbeiter(toDisplay);

     // Inflate the layout for this fragment
    v = inflater.inflate(R.layout.detailfragment, container, false);

    if(m==null) {           
        //If Mitarbeiter is empty
        pH.closeDB();
        return v;
    }

    //Inflating Elements

    employeeName = (TextView)v.findViewById(R.id.employee_name);
    cDate = (TextView)v.findViewById(R.id.department);
    currentPlace = (TextView)v.findViewById(R.id.place_label);

    comment_text = (EditText)v.findViewById(R.id.comment_text);
    reachable = (EditText)v.findViewById(R.id.reachable_text);
    state = (Spinner)v.findViewById(R.id.spinner_state);
    durchwahl = (EditText)v.findViewById(R.id.durchwahl);
    department = (EditText)v.findViewById(R.id.department_edit);
    email = (EditText)v.findViewById(R.id.email_edit);

    img = (ImageView)v.findViewById(R.id.userPic);

    changeData = (Button)v.findViewById(R.id.changeButton);

    //Setting Elements

    employeeName.setText(m.getL_name());
    currentPlace.setText(m.getStatus());    



    comment_text.setText(m.getBemerkung());


    reachable.setText(m.getErreichbar());       

    email.setText(m.getS_name()+"");        
    durchwahl.setText(m.getDurchwahl()+"",TextView.BufferType.EDITABLE);


    department.setText(m.getFunktion(),TextView.BufferType.NORMAL);

    //Spinner

    String[] values = { "Anwesend", "Mittagspause" , "Ausser Haus" , "Dienstreise", "Krankenstand" ,"Zeitausgleich", "Urlaub","Abwesend" };
    ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this.getSherlockActivity(), android.R.layout.simple_spinner_item,values);
    state.setAdapter(spinnerArrayAdapter);

    state.setSelection(StateMapper.returnState(m.getStatus()));

    //Image
    //.......
    return v;
}

正如我之前提到的,我的 Image、TextView 和 Spinner 元素正在刷新它们的内容。我还检查了所有变量的内容,一切似乎都很好,除了这些 EditText 元素。如果我将 EditText 元素转换为 TextView,则内容会发生变化(在代码中但不在 GUI 中)。让我绝望的是,EditText 在我第一次设置值时会刷新。

有谁知道,我如何能够刷新我的EditText领域的内容?

4

3 回答 3

15

我不确定,但尝试onResume()将您的文本设置为恢复状态。

或尝试

选项卡更改时的 Intent.FLAG_ACTIVITY_CLEAR_TOP。

于 2012-10-20T09:56:11.817 回答
1

您还可以尝试向消息队列发布一个可运行对象,以便在渲染后更新 EditText(在 MonoDroid/C# 中,请参阅How to run a Runnable thread in Android? for java):

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
{
    EditText et = FindViewById<EditText>(...);

    et.Post(() => { et.Text = "content"; });
}

此外,如果您有一个 TextChanged 事件处理程序(例如在文本更改时显示保存图标/按钮),也将其发布在可运行文件中,并在 et.Text 分配之后执行。否则,TextChanged 事件将在分配初始 et.Text 内容时触发,从而在 USER 未更改任何内容时触发 TextChanged 事件(即,显示保存按钮):

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
{
    EditText et = FindViewById<EditText>(...);

    et.Post(() => 
        { 
            et.Text = "content"; 
            et.TextChanged += TextChangedHandler;
        });
}

private void TextChangedHandler(object o, EventArgs args)
{
    ShowSaveButton();
}
于 2013-03-12T21:30:29.843 回答
0

我在 2021 年遇到了这个问题。我只需要在设置文本之前再次调用 findViewById。

    myEditText = (EditText)view.findViewById(R.id.myEditText);
    myEditText.setText(String.valueOf(newValue));
于 2021-11-29T12:53:23.883 回答