私はandroid:"onClick" = addMateria;
を設定していますので、別のIDを持つ別のButtons
を持っていますが、問題は私がフラグメントを使用しており、彼はFragment
のメソッドaddMateriaを見ることができません。onActivityResultはデータをフラグメントに戻しません
したがって、Fragment
を含むActivity
の中にメソッドを配置します。 このメソッドはstartActvityForResultを呼び出し、Fragmentはデータを取り戻します。
問題はフラグメントが何も戻ってこないということです。 私はsuper.onActivityResult
または簡単なコールStartActivityForResult
を使用することを提案するいくつかの記事を読むが、何も変わらない!
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) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
MySQLiteHelper db = new MySQLiteHelper(getActivity());
//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
内部onActivityResultですデータベース?
私が持っているもの: Aビューは、ボタンonとメソッドonClickを持つ80個のボタンで構成され、結果のアクティビティを開始します。私は宣言した場合、それはフラグメント内に直接それを宣言することは不可能だ、XML内のonClickと呼ば 方法addMateria、および: このメソッドは、ユーザーからのデータを取るdialogActivityを開始し、断片
にonActivityResultの問題を送り返しますその中にフラグメントを含むActivity onActivityResultはDialogからデータを取り戻さないので、startActivityForResult(Activity内)とonAcitivtyResult(Fragment内)の間の接続が失われていることをActivityから開始すると思います。
インターフェイスで唯一/最良の方法ですか?
こんにちはWeava、あなたの提案に感謝します。 私はあなたのメソッドを試してみますが、とにかく私はインターフェイスのないフラグメントの中にaddMateriaメソッドを置くことができませんか? それは唯一の方法ですか? – Dario
onClick関数は、宣言されているのと同じアクティビティまたはフラグメント内のビューに指定する必要があります。あなたのボタンがアクティビティにある場合、そのデータを添付されたフラグメントに送信するための何らかの方法が必要です。他の方法もありますが、これは最もクリーンです。 – Weava
はいonClick関数は、アクティビティにないフラグメントのビュー内にあります。 onClickメソッドを持つすべてのボタンを含むビューは、その内部でonclickメソッドがDialog_Activityを呼び出していくつかのデータを返すFragmentによって管理されますが、Fragment_class内でメソッドを宣言することはできません。 – Dario