GetSupportFragmentManager getFragment without tag or idAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 GetSupportFragmentManager getFragment without tag or id

Post by Anonymous »

Ich entwickle eine Tablet-Anwendung für Android 3.1.

Ich verwende ViewPager und Fragmente für eine Aktivität. Mein Problem ist, dass ich nicht weiß, wie ich Fragmenten eine ID oder ein Tag zuweisen soll.

Aktivität

Code: Select all

public class FillEReportFragmentActivity extends FragmentActivity
{
...

/**
* View Pager to manage form parts.
*/
private ViewPager mViewPager;
/**
* Page Adapter to handle fragments.
*/
private FillEReportFragmentPagerAdapter mPagerAdapter;

@Override
protected void onCreate(Bundle savedInstance)
{
Log.v("FillEReportFragmentActivity", "onCreate");

super.onCreate(savedInstance);
setContentView(R.layout.fill_ereport_paged);

// Recoge los argumentos que le llegan de la actividad padre.
Bundle extras = getIntent().getExtras();
if (extras != null)
{
qapId = extras.getLong(BundleKeys.qapIdKey);
orderId = extras.getLong(BundleKeys.orderIdKey);
eReportId = extras.getLong(BundleKeys.eReportIdKey);
}

// Cargamos el E-Report o creamos uno nuevo.  Además se recuperan los
// artículos de la orden actual.
LoadEReportAsyncTask task = new LoadEReportAsyncTask(this);
task.execute(Long.toString(this.qapId));

// Establezco los fragmentos (o partes del form) que se mostrarán en el
// View Pager.
mViewPager = (ViewPager)findViewById(R.id.pager);
mPagerAdapter = new FillEReportFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mPagerAdapter);

// Muestro en la parte inferior unos círculos para indicar donde me
// encuentro dentro del E-Report.
CirclePageIndicator mIndicator = (CirclePageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mViewPager);

// Creo unos tabs para poder navegar más facilmente a través de las
// partes del E-Report.
TabPageIndicator titleIndicator = (TabPageIndicator)findViewById(R.id.tabIndicator);
titleIndicator.setViewPager(mViewPager);
}

...
}
FragmentPagerAdapter

Code: Select all

public class FillEReportFragmentPagerAdapter extends FragmentPagerAdapter
{
private static final String[] TITLES = new String[] {
"Factory",
"Items"
};

public FillEReportFragmentPagerAdapter(FragmentManager fm)
{
super(fm);
// TODO Auto-generated constructor stub
}

@Override
public Fragment getItem(int index)
{
switch (index)
{
case 0:
return FactoryInfoFragment.newInstance();
case 1:
return ItemsFragment.newInstance();

default:
return null;
}
}

@Override
public int getCount()
{
return 2; // TODO: Este número hay que cambiarlo porque serán más.
}

public String getPageTitle(int position)
{
return TITLES[position];
}
}
res/values/ids.xml

Code: Select all





FactoryInfoFragment

Code: Select all

public class FactoryInfoFragment extends Fragment
{
public static FactoryInfoFragment newInstance()
{
FactoryInfoFragment frag = new FactoryInfoFragment();

return frag;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
Log.v("FactoryInfoFragment", "onCreateView");

View v = inflater.inflate(R.layout.frag_general_info_factory, container, false);
view.setId(R.id.frag_general_info_factory);

return v;
}
}
frag_general_info_factory.xml

Code: Select all



  



...


Hier möchte ich ein bestimmtes Fragment erhalten

Code: Select all

private class LoadEReportAsyncTask extends AsyncTask
{
private Context mContext;
private ProgressDialog loadingDialog;
private EReport eReport;
private QAP qap;

public LoadEReportAsyncTask(Context context)
{
Log.v("LoadEReportAsyncTask", "constructor");
eReport = null;
qap = null;

this.mContext = context;
loadingDialog = new ProgressDialog(mContext);
loadingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
loadingDialog.setMessage(getString(R.string.msg_loading_ereport));
loadingDialog.setCancelable(false);
loadingDialog.show();
}

@Override
protected Boolean doInBackground(String... params)
{
Log.v("LoadEReportAsyncTask", "doInBackground");
...
}

protected void onPostExecute(Boolean result)
{
Log.v("LoadEReportAsyncTask", "onPostExecute");

FillEReportFragmentActivity parentActivity = (FillEReportFragmentActivity) mContext;
if (result)
{
FactoryInfoFragment factFragment = (FactoryInfoFragment)getSupportFragmentManager().findFragmentById(R.id.frag_general_info_factory);
factFragment.fillEReport(eReport, qap);

Toast.makeText(getApplicationContext(), getString(R.string.msg_ereport_got_correct), Toast.LENGTH_SHORT).show();

ItemsFragment fragment = (ItemsFragment)getSupportFragmentManager().findFragmentById(R.id.frag_general_info_items);
fragment.setUpArticles(orderArticles);
}
else
{
Toast.makeText(getApplicationContext(), getString(R.string.msg_ereport_problem), Toast.LENGTH_LONG).show();
}

loadingDialog.dismiss();
}
}
Hier:

Code: Select all

(FactoryInfoFragment)getSupportFragmentManager().findFragmentById(R.id.frag_general_info_factory);
Ich verwende R.id.frag_general_info_factory, um diese Fragmentreferenz zu erhalten, aber ich erhalte eine Null.

Wie kann ich ein Tag oder eine ID für FactoryInfoFragment festlegen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post