Как передать данные из Activity в диалог в Android Studio - PullRequest
0 голосов
/ 28 мая 2020

Мне нужно передать данные из MainActivity в диалог в Android Studio, чтобы при запуске AlertDialog в нем могло отображаться значение, которое я отправил из MainActivity. До сих пор с помощью этого кода мне удавалось передавать данные только из диалога в MainActivity, но не наоборот. Данные, которые я хочу отправить:

IPAdreess = "192.1681.1.4";
IPPort ="8089";

Вот моя MainActivity:

public class MainActivity extends AppCompatActivity implements ConfigWIFIDialog.ConfigWIFIDialogListener {
private String IPAdreess = "192.1681.1.4";
private String IPPort ="8089";
private TextView myIPAdreess;
private TextView myIPPort;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myIPAdreess = (TextView) findViewById(R.id.txv_ipAddress);
    myIPPort = (TextView) findViewById(R.id.txv_ipPort);
    button = (Button) findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openDialog();
        }
    });
}

public void openDialog() {
    ConfigWIFIDialog configWIFIDialog = new ConfigWIFIDialog();
    configWIFIDialog.show(getSupportFragmentManager(), "example dialog");
}

@Override
public void applyTexts(String mIpAddreess, String mIpPort) {
    myIPAdreess.setText(mIpAddreess);
    myIPPort.setText(mIpPort);
}
}

А вот диалог:

public class ConfigWIFIDialog extends AppCompatDialogFragment {
private EditText myIpAddress;
private EditText myIpPort;
private ConfigWIFIDialogListener listener;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.config_wifi_dialog, null);

    myIpAddress = (EditText) view.findViewById(R.id.etx_ipAddress);
    myIpPort = view.findViewById(R.id.etx_ipPort);

    builder.setView(view)
            .setTitle("Configuracion WIFI")
           .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                }
            })
            .setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    String mIpAddreess = myIpAddress.getText().toString();
                    String mIpPort = myIpPort.getText().toString();
                    listener.applyTexts(mIpAddreess, mIpPort);
                }
            });

    return builder.create();
}
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        listener = (ConfigWIFIDialogListener) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString() +
                "must implement ConfigWIFIDialogListener");
    }
}
public interface ConfigWIFIDialogListener {
    void applyTexts(String mIpAddreess, String mIpPort);
}
}

1 Ответ

1 голос
/ 28 мая 2020

Вы реализуете AppCompatDialogFragment, вы можете передавать ему данные, задав его arguments

public void openDialog() {
    ConfigWIFIDialog configWIFIDialog = new ConfigWIFIDialog();
    Bundle args = new Bundle();
    args.putString("title", title);
    configWIFIDialog.setArguments(args);
    configWIFIDialog.show(getSupportFragmentManager(), "example dialog");
}

вы можете узнать больше из codepath

...