Я пытаюсь восстановить свое приложение с помощью Navigation Drawer Activity, но в старой версии с простой активностью у меня есть диалог, который берет данные от пользователя и управляет ими внутри активности.
Теперь у меня есть фрагменты, и у меня возникают проблемы с получением данных от пользователя.
Моя первая проблема: MainActivity содержит 4 фрагмента, один из них имеет много кнопок, которые используют метод onClick в XML. С Activity все работает без проблем, но с Fragments я не могу объявить метод onClick xml!
Вторая проблема заключается в том, что метод onClick вызывает DialogActivity с помощью startActivityForResult и возвращает данные с помощью onActivityResult. Я перемещаю метод onClick внутри MainActivity, который содержит фрагмент, но когда он запускает диалог с startActivityForResult, onActivityResult внутри фрагментов не вызывается.
Я пытаюсь переместить его внутри действия и передать полученные данные фрагменту с интерфейсом, но я получаю сообщение об ошибке функции Drawable style = setButtonColor(color);
внутри onActivityResult
Каков наилучший способ выполнить это? Лучше удалить DialogActivity и использовать DialogFragment для возврата данных без startActivityForResult и onActivityResult?
Вот код, который мне нужно адаптировать к новой графике Fragment.
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/new_button"
android:id="@+id/m12"
android:onClick="addMateria"
android:background="@drawable/buttons"
android:singleLine="true"
android:textSize="12sp"
android:layout_column="2" />
Метод onClick
public void addMateria(View v){
/* Prendo il nome della risorsa cosi nel ricompilare il progetto non perdo *
* tutti i riferimenti ai bottoni salvati nel database */
clickedButtonViewId = getResources().getResourceEntryName(v.getId());
//StartActivityForResult perche mi aspetto la materia inserita dall'altra activity
Intent myIntent = new Intent(MainActivity.this, DialogAddMateria.class);
startActivityForResult(myIntent, 1);
//onStop();
}
И как я забираю данные
//Take back data from ActivityAddMateria
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
MySQLiteHelper db = new MySQLiteHelper(getActivity());
Toast.makeText(getContext(), "DENTRO ACTIVITYRESULT",
Toast.LENGTH_LONG).show();
//Cambio subito il Button
int resId = getResources().getIdentifier(clickedButtonViewId, "id", getActivity().getPackageName());
final Button clickedtextView = (Button) getActivity().findViewById(resId);
String result = data.getStringExtra("result"); //Take the materia from Dialog
int color = data.getIntExtra("color", 1); //Take the color from Dialog
//Controllo se il Button è già presente nel db se presente aggiorno se non presente inserisco
boolean modifica = db.Exists(clickedButtonViewId);
//Se voglio ripristinare il bottone di default
if (color == getResources().getColor(R.color.blue_orario)) {
//Ripristino la grafica di Default
Drawable style = setButtonColor(color);
clickedtextView.setBackground(style);
clickedtextView.setText("New");
//Se la materia è nel database la cancello
if (modifica) {
db.deleteSingleMateria(clickedButtonViewId);
}
} else {
//Quando inserisco un normale bottone colorato
if (!modifica) {
//Materia da inserire in un nuovo spazio
db.addMateriaToDb(new Materia(clickedButtonViewId, result, color));
} else {
//Materia già presente nel Button quindi aggiorno la materia
db.updateMateria(new Materia(clickedButtonViewId, result, color));
Toast.makeText(getContext(), "Materia modificata!",
Toast.LENGTH_LONG).show();
}
//Inserisco la materia nel DB dei voti_media
db.addMateriaVotiFromOrario(new MaterieVoti(result, 0.0));
clickedtextView.setText(result);
//clickedtextView.setBackgroundColor(color);
//clickedtextView.getBackground().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
Drawable style = setButtonColor(color);
clickedtextView.setBackground(style);
}
}
if (resultCode == Activity.RESULT_CANCELED) {
//Nessuna materia inserita
}
}
}//onActivityResult
Я не знаком с фрагментами, и мне сложно делать то, что мне нужно, если кто-нибудь может сказать мне, как это сделать, или предложить изменить связь между onClick и методом, фрагментом и методом, я здесь!