0

我有一个简单的项目(API10),在“FragmentActivity”中有一个 Edittext 和一个按钮。主要目标是:当我单击“打开对话框”按钮时,将弹出一个自定义对话框,如果我单击“正”按钮,则对话框关闭并且 Edittext(在 Fragmentactivity 中)将显示“正”...(否定按钮的行为相同)。

一切正常,除非我单击打开 de Dialog 并且在我单击 pos/neg 按钮之前,如果我旋转屏幕,对话框仍然存在,但是,在旋转之后,如果我单击 Pos/Neg 按钮,没有任何反应编辑文本?!

我创建了“applytext”方法,以便可以找到实际的 Edittext,但没有成功。

你能帮我理解发生了什么吗?

(注意:这是我为演示我的问题而制作的一个简单示例,因为我使用的是 dialogFragment,但我有相同的问题行为)。

这是我的代码(MainActivity.java):

public class MainActivity extends FragmentActivity {


    private Button bt;
    private EditText et; 



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        bt = (Button) findViewById(R.id.bt_openDialog);
       // et = (EditText) findViewById(R.id.editText_result);


        bt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                final Dialog d = new Dialog(MainActivity.this, R.style.AppThemeModificado);
                d.requestWindowFeature(Window.FEATURE_NO_TITLE);
                d.setContentView(R.layout.signinlayout);




                Button c = (Button) d.findViewById(R.id.bt_cancelar);

                c.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {



                    //  et.setText("Negative");

                        applytext("Negative");

                        d.dismiss();


                    }
                });


                Button e = (Button) d.findViewById(R.id.bt_entrar);

                e.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {


                    //  et.setText("Positive");
                        applytext("Positive");

                        d.dismiss();

                    }
                });


                WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
                lp.copyFrom(d.getWindow().getAttributes());
                lp.width = WindowManager.LayoutParams.FILL_PARENT;
                //lp.height = WindowManager.LayoutParams.FILL_PARENT;
                d.show();
                d.getWindow().setAttributes(lp);



            }
        });






    }





    private void applytext(String text) {


        Log.d("HugoXp", "----in");

        et = (EditText) findViewById(R.id.editText_result);


        if (et == null) {

            Log.d("HugoXp", "et = null");

        }else{

            Log.d("HugoXp", "et <> null");
            Log.d("HugoXp", "Text that was in the et: " + et.getText().toString());
            Log.d("HugoXp", "actual 'String text': " + text);           
        }



        et.setText(text);


        Log.d("HugoXp", "----out");
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    }

(文件:signinlayout.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/outrashape"
    android:orientation="vertical" >




    <ImageView
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:background="#FFFFBB33"
        android:contentDescription="@string/app_name"
        android:scaleType="center"
        android:src="@drawable/logoheader" />


    <EditText
        android:id="@+id/username"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginTop="16dp"
        android:hint="@string/username"
        android:inputType="textEmailAddress" />



    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginTop="4dp"
        android:hint="@string/password"
        android:inputType="textPassword"
        android:typeface="serif" />






    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Applied theme"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >








        <Button
            android:id="@+id/bt_entrar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="50"
            android:background="@drawable/estilobotaored"
            android:text="Positive" />






        <Button
            android:id="@+id/bt_cancelar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="50"
            android:background="@drawable/estilobotaored"
            android:text="Negative" />

    </LinearLayout>

</LinearLayout>
4

1 回答 1

0

您可以考虑使用 Android AlertDialog Fragment。它在某些方面不太灵活,但似乎完全可以满足您的需要。虽然,这不是你的问题所在。

无论哪种方式,您都将通过执行此类操作来创建对话框(在单独的文件中或在同一活动中,没关系)

public static class MyAlertDialogFragment extends DialogFragment {

public static MyAlertDialogFragment newInstance(int title) {
    MyAlertDialogFragment frag = new MyAlertDialogFragment();
    Bundle args = new Bundle();
    args.putInt("title", title);
    frag.setArguments(args);
    return frag;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    int title = getArguments().getInt("title");

    return new AlertDialog.Builder(getActivity())
            .setIcon(R.drawable.alert_dialog_icon)
            .setTitle(title)
            .setPositiveButton(R.string.alert_dialog_ok,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        ((FragmentAlertDialog)getActivity()).doPositiveClick();
                    }
                }
            )
            .setNegativeButton(R.string.alert_dialog_cancel,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        ((FragmentAlertDialog)getActivity()).doNegativeClick();
                    }
                }
            )
            .create();
    }
}

然后,从调用活动中,您可以使用这些回调方法:

void showDialog() 
{
        DialogFragment newFragment = MyAlertDialogFragment.newInstance(
        "Title");
        newFragment.show(getFragmentManager(), "dialog");
}

public void doPositiveClick() {

    Log.i("FragmentAlertDialog", "Positive click!");
    editText.setText("positive");
}

public void doNegativeClick() {
    // Do stuff here.
    Log.i("FragmentAlertDialog", "Negative click!");
    editText.setText("negative");
}

因此,在您的按钮 onClick() 中,您只需调用 showDialog(),其余部分应按预期工作

于 2012-11-16T14:06:35.333 回答