11

を使用してViewpager3を切り替えfragmentsていますが、2番目のタブ(またはfragment)の更新を除いて、すべて正常に機能しています。このタブには、画像、静的Textviews、動的TextViews、およびEditTextフィールドがあります。

2番目のタブが選択されるたびに、setText()すべての動的フィールドで呼び出されます。TextViewコンポーネントとスピナーはコンテンツを更新および更新していますが、EditText要素は更新していません。これらのフィールドが更新されない理由がわかりません。タブを変更した後、を呼び出しnotifiyDataSetChanged()ますTabsAdapteronViewCreated()タブを変更するたびに呼び出されます。2onViewCreated()番目のフラグメントでは、要素の内容を変更しています。

それが私のフラグメントのコードです:

 @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、SpinnerElementsはコンテンツを更新しています。また、すべての変数の内容を確認しました。これらの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#では、Androidでランナブルスレッドを実行する方法を参照してください):

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

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

また、TextChangedイベントハンドラー(たとえば、テキストが変更されたときに保存アイコン/ボタンを表示するため)がある場合は、それをランナブルにも投稿し、et.Text割り当ての後に実行します。それ以外の場合、最初のet.Textコンテンツが割り当てられたときにTextChangedイベントが発生し、ユーザーが何も変更していないときに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 に答える