我有80个不同的Buttons
与不同的ID,所以我设置android:"onClick" = addMateria;
但问题是,我使用片段,他看不到Fragment
里面的方法addMateria。onActivityResult不将数据带回片段
所以我把方法放在Activity
里面,其中包含Fragment
。 该方法调用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为什么法不启动,我无法保存内接收数据数据库?
我有什么: 甲片段,它的视图是由与80层的按钮与该启动活动为结果的方法的onClick。 此方法开始一个dialogActivity从用户获取数据并发送回与onActivityResult该片段
问题: 方法addMateria调用的onClick内部XML它不可能直接声明它内部片段,并且如果我声明它里面的Activity包含Fragment,onActivityResult不会从Dialog取回数据,所以我认为如果方法从Activity开始,startActivityForResult(内部的Activity)和onAcitivtyResult(内部的Fragment)之间的连接就会丢失。
它与接口的唯一/最好的方式?
嗨Weava,感谢您的建议。 我会尝试你的方法,但无论如何,我不能把方法addMateria里面没有接口的片段? 或者这是唯一的方法? – Dario
必须将onClick函数指定给与声明相同的活动或片段中的视图。如果您的按钮位于“活动”中,则必须有某种方法将数据发送到附加片段。还有其他方法,但我觉得这是最干净的。 – Weava
是的,onClick函数位于不在Activity中的片段视图中。 带有onClick方法的所有按钮的视图由Fragment管理,在他内部onclick方法调用返回一些数据的Dialog_Activity ....但无论如何,我无法在Fragment_class中声明该方法。 – Dario