Cómo llamar a un fragmento de BaseAdapter Class Android?
Quiero llamar a un fragmento de mi clase BaseAdapter. En esta clase tengo un botón de clic del que quiero llamar al nuevo fragmento, pero no puedo conseguirlo. Tengo que pasar valores del clic del botón al fragmento.
Clase BaseAdapter
- Intentos pendientes no disparados
- Inicie la aplicación google maps para obtener instrucciones sobre cómo llegar en android
- Valores perdidos en la actividad anterior cuando hago clic en el botón, pero no cuando this.finish () se llama
- ¿Cómo puedo enlazar este servicio en Android?
- Acceso directo para iniciar una actividad
public class StatusAdapter extends BaseAdapter { private Activity activity; private ArrayList<HashMap<String, String>> data; private static LayoutInflater inflater = null; public StatusAdapter(Activity a, ArrayList<HashMap<String, String>> d) { activity = a; data = d; inflater = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; if (convertView == null) vi = inflater.inflate(R.layout.approval_selftrip_inner, null); TextView approved_by = (TextView) vi.findViewById(R.id.approved_by); TextView status = (TextView) vi.findViewById(R.id.status); TextView trip = (TextView) vi.findViewById(R.id.trip); Button view_log = (Button)vi.findViewById(R.id.view_log); HashMap<String, String> list = new HashMap<String, String>(); list = data.get(position); approved_by.setText(list.get("first_id")); status.setText(list.get("status")); trip.setText(list.get("trip")); view_log.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Here i want to call my fragment } }); return vi; } }
Fragmento
public class Log extends Fragment { Context context ; View rootView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { context = getActivity(); rootView = inflater.inflate(R.layout.activity_log, container, false); return rootView; } }
Quiero llamar a este fragmento de la clase BaseAdapter en el clic de view_log
. view_log
favor, ayúdame cómo podemos hacer esto
Después de Martin Cazares he hecho esto
En Actividad
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { context = getActivity(); rootView = inflater.inflate(R.layout.activity_main, container, false); mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Recived", Toast.LENGTH_LONG).show(); ApprovalLog fragment2 = new ApprovalLog(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); fragmentTransaction.replace(R.id.content_frame, fragment2); fragmentTransaction.commit(); } }; return rootView; }
En la clase AdapterClass
view_approvallog.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { CommonUtils.showAlert("Test in Adapter", activity); activity.registerReceiver(mBroadcastReceiver, new IntentFilter( "start.fragment.action")); } });
- DialogFragment se bloquea Actividad al llamar a startActivity ()
- Error al iniciar la actividad debido a ClassNotFoundException
- ¿Cómo pasar el waypoint múltiple a la aplicación estándar de google map en android a través de la intención de navegación?
- Cómo bloquear el micrófono para utilizar otra aplicación?
- Android: Share ¿La intención de la imagen no funciona con Facebook?
- Hacer una actividad particular como actividad de raíz en la pila
- El envío de correo electrónico html en android con <table>, etc - no hay realmente una forma de intención relativamente integrada?
- Adición de múltiples puntos de acceso en Google Maps mediante Android Intent
Simplemente utilice esto.
public void onClick(View view) { LogFrag fragment2 = new LogFrag(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragment1, fragment2); fragmentTransaction.commit(); }
Honestamente si usted tiene que llamar a su fragmento de un BaseAdapter algo está terriblemente mal con la arquitectura de su aplicación, que están estrechamente los componentes de acoplamiento y Spaghetti Código será un problema pronto, si desea mantenerlo limpio, hacer un oyente o enviar una emisión de Y llamar a su fragmento de su actividad como lo hace normalmente, el punto es mantener los componentes haciendo el trabajo que están destinados y no tener todos en una sola clase, eso es una cosa terrible de hacer y el código se vuelve menos legible.
Como se explicó un simple enfoque para desacoplar las cosas en android es mediante el envío de mensajes de difusión, por lo que esta es una manera de hacerlo:
view_log.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Here i want to call my fragment //You need to pass a reference of the context to your adapter... context.sendBroadcast(new Intent("start.fragment.action")) } });
Ahora en su actividad todo lo que tiene que hacer es registrar un BroadcastReceiver con el "start.fragment.action" y eso es todo dentro de él solo llame a su fragmento:
//In your activity... context.registerReceiver(mBroadcastReceiver, new IntentFilter("start.fragment.action")) . . . BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //This piece of code will be executed when you click on your item // Call your fragment... } };
No te olvides de anular el registro cuando termines, y si necesitas pasar algunos parámetros al fragmento puedes usar extras en la intención al enviar el mensaje de difusión …
NOTA: LocalBroadcastManager sería mejor utilizar ahora.
¡Saludos!
Utilizar
((Activity) mContext).getFragmentManager();//use this view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Fragment fragment = new CallThisFragment(); FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.main_activity, fragment).commit(); } });
Manera más fácil: Do in Fragment
Adapter a = new Adapter(arg,Fragment.this);// or only this. This will pass the fragment object to the adapter.
Y en Adaptador
v.ckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(fragment!=null) fragment.ValidateList();// call any public method of the fragment } });
Forma perfecta de llamar fragmento del adaptador de base personalizada
fragmentManager.beginTransaction() .add(R.id.content_frame, new YourFragmentName()) .addToBackStack("fragBack")).commit(); ((Activity) context).setTitle("Title For Action Bar");`
- Error al iniciar "com.twitter.android.PostActivity"
- Autocompletetextview con adaptador y filtro personalizados