2012-04-24 16 views
6

Tengo una situación para mi aplicación de Android. El caso es que estoy usando un adaptador de página de vista aunque tengo 3 páginas que en realidad son fragmentos. Mi problema es que quiero actualizarlos desde una actividad de diálogo. La actividad de diálogo que contiene una lista de cuyo evento onclick quiero actualizar el fragmento.Cómo actualizar un fragmento en una viewpageadapter a través de otra actividad

En primer lugar, es posible si es así, por favor ingrese y ayúdeme.

Saludos Gaurav

Este es mi punto de vista la página adaptador

/* 
* Copyright (C) 2012 Gaurav Rawat 
* 
*/ 
package com.punksrant.ifinddryday.adapter; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

import com.punksrant.ifinddryday.fragment.AllFragment; 
import com.punksrant.ifinddryday.fragment.HomeFragment; 
import com.punksrant.ifinddryday.fragment.SynchFragment; 
import com.punksrant.ifinddryday.utils.IFindDryDaysConstants; 
import com.viewpagerindicator.TitleProvider; 

public class ViewPagerAdapter extends FragmentPagerAdapter implements 
     TitleProvider { 

    private static String[] titles = IFindDryDaysConstants.titles; 

    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public String getTitle(int position) { 
     return titles[position % titles.length].toUpperCase(); 
    } 

    @Override 
    public int getCount() { 
     return titles.length; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment; 
     switch (position) { 
     case 0: 
      fragment = HomeFragment.newInstance(); 
      break; 
     case 1: 
      fragment = AllFragment.newInstance(); 
      break; 

     case 2: 
      fragment = SynchFragment.newInstance(titles[position 
        % titles.length]); 
      break; 

     default: 
      fragment = HomeFragment.newInstance(); 
     } 
     return fragment; 
    } 

} 
' and in this I want to refresh the home fragment from my dialog class 
'/* 
* Copyright (C) 2012 Gaurav Rawat 
* 
*/ 
package com.punksrant.ifinddryday.activity; 

import roboguice.inject.ContentView; 
import roboguice.inject.InjectView; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockFragmentActivity; 
import com.google.inject.Inject; 
import com.punksrant.ifinddryday.model.Coordinates; 
import com.punksrant.ifinddryday.utils.DryDayJSONResParser; 
import com.punksrant.ifinddryday.utils.IFindDryDayViewUtils; 

@ContentView(R.layout.statedialog) 
public class Dialog extends RoboSherlockFragmentActivity { 
    @InjectView(R.id.dialogList) 
    ListView listView; 
    @Inject 
    SharedPreferences preferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String[] states = DryDayJSONResParser.getSupportedStates(); 
     listView.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, android.R.id.text1, states)); 
     listView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       String state = ((TextView) view).getText().toString(); 
       Coordinates coordinates = IFindDryDayViewUtils 
         .getCoordinatesFromPreferences(preferences); 
       coordinates.setState(state); 
       IFindDryDayViewUtils.updateCityFromLocation(coordinates, 
         preferences); 

       finish(); 
      } 

     }); 
    } 
}, 
+0

¿Dónde está su adaptador de página de visualización ?. ¿Puedes publicar algún código de la actividad que contiene el visor? – gutiory

+0

Hola @gutiory pegará el código una vez en casa, de hecho, estoy seguro de que estoy usando la librería Jake ViewPagerIndicator.https: //github.com/JakeWharton/Android-ViewPagerIndicator con fragmentos que se están agregando desde el fragmento de página. Publique el código tan pronto como sea posible. Estoy de vuelta. –

+0

Este es mi adaptador de página de vista –

Respuesta

1

(créditos a blahdiblah rui.araujo) Hay varias maneras de lograr esto.

La primera opción es más fácil, pero un poco más ineficiente.

Anulación getItemPosition en su PagerAdapter así:

public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

De esta manera, cuando se llama notifyDataSetChanged(), la vista del localizador eliminará todos los puntos de vista y volver a cargar a todos. Como tal, se obtiene el efecto de recarga.

La segunda opción, suggested by alvarolb, es el método en instantiateItem() al crear una nueva vista. Luego, en lugar de usar notifyDataSetChanged(), puede usar findViewWithTag() para encontrar la vista que desea actualizar.

El segundo enfoque es muy flexible y de alto rendimiento. Felicitaciones a alvarolb por la investigación original.

Cuestiones relacionadas