PDA

View Full Version : مشکل با findbytag



smemamian
پنج شنبه 30 آبان 1392, 00:10 صبح
سلام دوستان
من داشتم با مثال های مختلف کار می کردم که به یک مشکلی برخوردم :

mTaskFragment = (TaskFragment) fm.findFragmentByTag("task");


در کد بالا، فراگمنتی که با تگ task شناسایی میشه رو پیدا می کنه ! مشکل من این که اصلا جایی در برنامه حرفی از task نیومده یا بهتر بگم، تگ task کجا تعریف شده که اینجا find میشه ؟

کد خط 11:



public class MainActivity extends Activity implements TaskFragment.TaskCallbacks {

private TaskFragment mTaskFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

FragmentManager fm = getFragmentManager();
mTaskFragment = (TaskFragment) fm.findFragmentByTag("task");

// If the Fragment is non-null, then it is currently being
// retained across a configuration change.
if (mTaskFragment == null) {
mTaskFragment = new TaskFragment();
fm.beginTransaction().add(mTaskFragment, "task").commit();
}

// TODO: initialize views, restore saved state, etc.
}

// The four methods below are called by the TaskFragment when new
// progress updates or results are available. The MainActivity
// should respond by updating its UI to indicate the change.

@Override
public void onPreExecute() { ... }

@Override
public void onProgressUpdate(int percent) { ... }

@Override
public void onCancelled() { ... }

@Override
public void onPostExecute() { ... }
}





public class TaskFragment extends Fragment {

/**
* Callback interface through which the fragment will report the
* task's progress and results back to the Activity.
*/
static interface TaskCallbacks {
void onPreExecute();
void onProgressUpdate(int percent);
void onCancelled();
void onPostExecute();
}

private TaskCallbacks mCallbacks;
private DummyTask mTask;

/**
* Hold a reference to the parent Activity so we can report the
* task's current progress and results. The Android framework
* will pass us a reference to the newly created Activity after
* each configuration change.
*/
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mCallbacks = (TaskCallbacks) activity;
}

/**
* This method will only be called once when the retained
* Fragment is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Retain this fragment across configuration changes.
setRetainInstance(true);

// Create and execute the background task.
mTask = new DummyTask();
mTask.execute();
}

/**
* Set the callback to null so we don't accidentally leak the
* Activity instance.
*/
@Override
public void onDetach() {
super.onDetach();
mCallbacks = null;
}

/**
* A dummy task that performs some (dumb) background work and
* proxies progress updates and results back to the Activity.
*
* Note that we need to check if the callbacks are null in each
* method in case they are invoked after the Activity's and
* Fragment's onDestroy() method have been called.
*/
private class DummyTask extends AsyncTask<Void, Integer, Void> {

@Override
protected void onPreExecute() {
if (mCallbacks != null) {
mCallbacks.onPreExecute();
}
}

/**
* Note that we do NOT call the callback object's methods
* directly from the background thread, as this could result
* in a race condition.
*/
@Override
protected Void doInBackground(Void... ignore) {
for (int i = 0; !isCancelled() && i < 100; i++) {
SystemClock.sleep(100);
publishProgress(i);
}
return null;
}

@Override
protected void onProgressUpdate(Integer... percent) {
if (mCallbacks != null) {
mCallbacks.onProgressUpdate(percent[0]);
}
}

@Override
protected void onCancelled() {
if (mCallbacks != null) {
mCallbacks.onCancelled();
}
}

@Override
protected void onPostExecute(Void ignore) {
if (mCallbacks != null) {
mCallbacks.onPostExecute();
}
}
}
}

smemamian
پنج شنبه 30 آبان 1392, 15:26 عصر
دوستان کمک کنند...

shahin bahari
پنج شنبه 30 آبان 1392, 19:57 عصر
tag رو مثل id توی فایل xml مینویسند. تو فایل xml که مربوط به layout این برنامه هست بگردید. پیدا میشه.