1. Почему при поворачиванию экрана создаться экземпляр Fragment соответствующий предыдущему, но с другим Хеш
кодом, который мне не нужен, у меня все равно в onCreateView создаёться Fragmen
2. Как выйти из ситуации что setRetainInstance(true) не работает при динамическом добавлении фрагмента
3. И собственно что ещё у меня не так
4. И если идти до конца, какую ссылку мы должны передавать в статический класс MyTask, что бы был доступ к фрагменту?
Побывал сохранить экземпляр фрагмента ничего из этого хорошего не получилось
Код: Выделить всё
public class MainActivity extends Activity {
private FragmentTransaction fragmentTransaction;
public Fragm1 currFragm1;
@SuppressLint("NewApi")
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Log3", "create MainActivity: " + this.hashCode());
currFragm1 = new Fragm1();
fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frag_content2, currFragm1);
fragmentTransaction.commit();
}
}Код: Выделить всё
public class Fragm1 extends Fragment {
private TextView tv;
private MyTask mt;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragm1, container, false);
Log.d("Log3", "create Fragm1: " + this.hashCode());
tv = (TextView) v.findViewById(R.id.tv);
if (mt == null) {
mt = new MyTask();
mt.execute();
Log.d("Log3", "create MyTask: " + mt.hashCode());
}
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
}
class MyTask extends AsyncTask<String, Integer, Void> {
@Override
protected Void doInBackground(String... params) {
try {
for (int i = 1; i <= 10; i++) {
TimeUnit.SECONDS.sleep(1);
publishProgress(i);
Log.d("Log3", "i = " + i
+ ", Fragm1: " + Fragm1.this.hashCode()
+ ", MyTask: " + this.hashCode());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
tv.setText("i = " + values[0]);
}
}
}
