2

私はこの問題について多くのことを読みましたが、自分のケースを機能させることができません。

XML レイアウト ファイルで初期テキストを含む TextView 要素を定義しました。

次のようにして、メイン アクティビティ クラス (FragmentActivity) から変更しようとすると、次のようになります。

TextView domainText = (TextView) view.findViewById(R.id.domainText);
domainText.setText("test");

それは完全に機能します。

しかし、メインのアクティビティ クラス (FragmentActivity) から起動された DialogFragment からこの TextView 要素を変更しようとすると、次のようになります。

public class QueryDomainDialogFragment extends DialogFragment{

...

@Override
public Dialog onCreateDialog(Bundle savedInstanceState){

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    // Set the dialog title
    builder.setTitle(R.string.queryTypeDialogTitle)
           .setSingleChoiceItems(R.array.queryDomains, 0, new           DialogInterface.OnClickListener() {

               @Override
               public void onClick(DialogInterface dialog,int which){

                   ListView lw = ((AlertDialog)dialog).getListView();
                   Object selectedDomain = lw.getAdapter().getItem(lw.getCheckedItemPosition());

                   LayoutInflater inflater = getActivity().getLayoutInflater();
                   View view = inflater.inflate(R.layout.activity_search, null);
                   TextView domainText = (TextView) view.findViewById(R.id.domainText);

                   domainText.setText("test2");
               }
           })

何も起こりません。

どうすればいいですか?私はそれを間違った方法でやっていますか?DialogFragment から要素を変更することはできませんか? 一種のコールバックを実装する必要がありますか?

その場合、TextView などの要素を DialogFragment から変更できない理由を知りたいです。

前もって感謝します。

4

1 に答える 1

0

inflate を実行すると、同じテキスト ビューを参照しなくなります。新しいインフレートされたビューではなく、まったく同じビューを設定する必要があります。レイアウトの一部ではないため、ダイアログから textview を参照することはできません。

View view = inflater.inflate(R.layout.activity_search, null);
TextView domainText = (TextView) view.findViewById(R.id.domainText);

リスナーを作成し、アクティビティにこのリスナーを実装させ、それをダイアログに渡す必要があります。

@Override
           public void onClick(DialogInterface dialog,int which){

               listener.setText("test2");
           }
于 2013-10-03T14:30:16.247 に答える