1

私のfragmentActivityからのフラグメントにあるtextviewのテキストを変更できないようです。さらにfrag.getView().findViewById、これは正しい方法だと思いますが、nullを返し、nullpointer例外をスローする方法を試しました。

フラグメント自体にメソッドを記述してテキストを設定し、getView()を使用すると、nullpointer例外も発生します。

また、fragment:nameによって呼び出される、ロードされた最初のフラグメントは、この同じコードをテキストにロードして入力します。FragmentTransaction.replace()呼び出された後にのみ機能しません

以下のコードは例外をスローしませんが、テキストは空白のままです。

public void onTabSelected(Tab tab, FragmentTransaction ft) {
    if(tab.getTag().equals("info")) {
        DisplayEventInfoFragment frag = new DisplayEventInfoFragment();
        ft.replace(R.id.detailsfragment, frag);
        final TextView mTimeView = (TextView)findViewById(R.id.ievent_title);
        final TextView mVenueView = (TextView)findViewById(R.id.ievent_venue);
        final TextView mDescView = (TextView)findViewById(R.id.ievent_description);
        mTimeView.setText(thisEvent.get("theTime")+" - "+thisEvent.get("endTime"));
        mVenueView.setText(thisEvent.get("venue"));
        mDescView.setText(thisEvent.get("description"));

    } else if(tab.getTag().equals("location")) {
        //DisplayEventMapFragment frag = new DisplayEventMapFragment();
        //ft.replace(R.id.detailsfragment, frag);
    }

}
4

2 に答える 2

6

Fragment のメイン ビューまたはサブ ビューをクエリするときは、Fragment.onCreateView() が呼び出されるまで待機する必要があります。

親アクティビティがフラグメントのレイアウト コンポーネントの変更を担当するのは奇妙に思えます。Fragments を使用する主な利点の 1 つは、自己完結型であり、アプリケーション全体で再利用できることです。

おそらく、より実行可能なアプローチは、フラグメントの onActivityCreated() または onStart() (onCreateView() の後に呼び出される) をオーバーライドし、そこに TextView を設定することです。

于 2012-12-10T05:16:39.677 に答える
0

実際の例: (これは textview ではなく edittext ですが、同じ原理で動作します)

機能させるには、現在のフラグメント ビューの名前を使用する必要があります。

この例では、editText がデータベースから動的に更新されます。

私のビューの名前は rootView です (メソッドがアクセスできるように公開しました):

public class FragmentPersonalD extends Fragment {

EditText PDADDUNIQUECODE;
EditText PDADDIDNR;
EditText PDADDNAME;
EditText PDADDSURNAME;
EditText PDADDEMAIL;
EditText PDADDAGE;
EditText PDADDGENDER;
EditText PDADDCELLNR;
EditText PDADDSERVICEPROVIDER;
EditText PDADDHOMENR;
EditText PDADDWORKNR;
EditText PDADDSTREETNAME,PDADDSUBURB,PDADDCITY, PDADDPROVINCE,PDADDPOSTALCODE;
EditText PDADDPOSTADDR;
EditText PDADDWORKADDR;

String setid;
String uniquecode;
String identitynr;
String Name;
String Surname;
String Email;
String Age;
String Gender;
String Cellnr;
String ServiceProvider;
String Homenr;
String Worknr;
String Streetname,Suburb,City,Province,PostalCode;
String PostAddr;
String WorkAddr;

View rootView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_details_personal,
            container, false);
    fetchdata(); }

私の fetchdata() メソッドは次のようになります。

データベースから edittext を動的に更新しています:

public void fetchdata()
{
    DBAdapter myDb = new DBAdapter(getActivity());
    myDb.open();

    int rows = myDb.CountrowsPersonalDetails();

    if(rows != 0)
    {
        Cursor cursor = myDb.getAllRowsPersonalDetails();
        if (cursor.moveToFirst()) {

            identitynr = cursor.getString(DBAdapter.COL_pdIDNR);
            Name = cursor.getString(DBAdapter.COL_pdNAME);
            Surname = cursor.getString(DBAdapter.COL_pdSURNAME);
            Email = cursor.getString(DBAdapter.COL_pdEMAIL);

            Age = cursor.getString(DBAdapter.COL_pdAGE);
            Gender = cursor.getString(DBAdapter.COL_pdGENDER);
            Cellnr = cursor.getString(DBAdapter.COL_pdCELLNR);
            ServiceProvider = cursor.getString(DBAdapter.COL_pdSERVICEPROVIDER);

            Homenr = cursor.getString(DBAdapter.COL_pdHOMENR);
            Worknr = cursor.getString(DBAdapter.COL_pdWORKNR);
            Streetname = cursor.getString(DBAdapter.COL_pdSTREETADDRESS);
            Suburb = cursor.getString(DBAdapter.COL_pdSUBURB);
            City = cursor.getString(DBAdapter.COL_pdCITY);
            Province = cursor.getString(DBAdapter.COL_pdPROVINCE);
            PostalCode = cursor.getString(DBAdapter.COL_pdPOSTALCODE);

            PostAddr = cursor.getString(DBAdapter.COL_pdPOSTALADDRESS);
            WorkAddr = cursor.getString(DBAdapter.COL_pdWORKADDRESS);
            }

        PDADDSTREETNAME = (EditText)rootView.findViewById(R.id.PDADDSTREETNAME);
        PDADDSTREETNAME.setText(Streetname);

        PDADDSUBURB = (EditText)rootView.findViewById(R.id.PDADDSUBURB);
        PDADDSUBURB.setText(Suburb);

        PDADDCITY = (EditText)rootView.findViewById(R.id.PDADDCITY);
        PDADDCITY.setText(City);

        PDADDPROVINCE = (EditText)rootView.findViewById(R.id.PDADDPROVINCE);
        PDADDPROVINCE.setText(Province);

        PDADDPOSTALCODE = (EditText)rootView.findViewById(R.id.PDADDPOSTALCODE);
        PDADDPOSTALCODE.setText(PostalCode);


        PDADDIDNR = (EditText)rootView.findViewById(R.id.PDADDID);
        PDADDIDNR.setText(identitynr);

        PDADDNAME = (EditText)rootView.findViewById(R.id.PDADDNAME);
        PDADDNAME.setText(Name);

        PDADDSURNAME = (EditText)rootView.findViewById(R.id.PDADDSURNAME);
        PDADDSURNAME.setText(Surname);

        PDADDEMAIL = (EditText)rootView.findViewById(R.id.PDADDEMAIL);
        PDADDEMAIL.setText(Email);

        PDADDAGE = (EditText)rootView.findViewById(R.id.PDADDAGE);
        PDADDAGE.setText(Age);

        PDADDGENDER = (EditText)rootView.findViewById(R.id.PDADDGENDER);
        PDADDGENDER.setText(Gender);

        PDADDCELLNR = (EditText)rootView.findViewById(R.id.PDADDCELL);
        PDADDCELLNR.setText(Cellnr);

        PDADDHOMENR = (EditText)rootView.findViewById(R.id.PDADDHOMENR);
        PDADDHOMENR.setText(Homenr);

        PDADDWORKNR = (EditText)rootView.findViewById(R.id.PDADDWORKNR);
        PDADDWORKNR.setText(Worknr);

        //PDADDPHYSICALADDR = (EditText)rootView.findViewById(R.id.PDADDPHYSICAL);
        //PDADDPHYSICALADDR.setText(PhysicalAddr);

        PDADDPOSTADDR = (EditText)rootView.findViewById(R.id.PDADDPOSTADDR);
        PDADDPOSTADDR.setText(PostAddr);

        PDADDWORKADDR = (EditText)rootView.findViewById(R.id.PDADDWORKADDR);
        PDADDWORKADDR.setText(WorkAddr);
        myDb.close();
    }
    else
    {
        myDb.close();
    }
}
于 2014-09-01T10:56:22.477 に答える