Моя проблема в том, что я не могу обновить данные своего адаптера AcTview, когда я ввожу данные из другого своего фрагмента.

В PageAdjuFragment у меня есть ACTV tv2 и его адаптер adapter2. Данные этого адаптера создаются getListpart() в VenteFragment (PageAdjuFragment расширяет VenteFragment).

Я знаю, что getListpart () и initpart () работают, потому что, когда я перезапускаю свое приложение, новые данные появляются в моем actv.

Я думаю, что проблема в том, что когда я переключаюсь между своими фрагментами, они уже запускаются, поэтому данные инициализируются только один раз при запуске.

Я переключаюсь между фрагментами, когда переключаю страницу в своем приложении. 3 фрагмента по 1 действию создать с помощью MyPagerAdapter

вот мой код

Фрагмент

public class PageAdjuFragment extends VenteFragment {
Context context = getActivity();

public PageAdjuFragment() {
    super();
    // TODO Auto-generated constructor stub
}

public static PageAdjuFragment newInstance(String vente) {
    PageAdjuFragment myFragment = new PageAdjuFragment();

    Bundle args = new Bundle();
    args.putString("vente", vente);
    myFragment.setArguments(args);

    return myFragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    // super.onCreate(savedInstanceState);
    final View v = inflater.inflate(R.layout.page_adju_layout, container, false);
    final Button b = (Button) v.findViewById(R.id.btconfp);
    final RadioGroup radiopmt = (RadioGroup) v.findViewById(R.id.radiopmt);
    final RadioButton rb1 = (RadioButton) v.findViewById(R.id.rb1);
    final RadioButton rb2 = (RadioButton) v.findViewById(R.id.rb2);
    final AutoCompleteTextView tv1 = (AutoCompleteTextView) v.findViewById(R.id.actv1);
    final AutoCompleteTextView tv2 = (AutoCompleteTextView) v.findViewById(R.id.actv2);
    final EditText tv3 = (EditText) v.findViewById(R.id.edt);

    // Recovery of the name of th folder/vente
    Bundle arg = getArguments();
    // final String vente = arg.getString("vente");
    VenteFragment.nomvente = arg.getString("vente");


    try {
        InitObjet();
        InitPart();
    } catch (IOException e) {

        e.printStackTrace();
    }

    for (String elem : getListpart()) {
        Log.v("part", elem);
    }
    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_dropdown_item_1line, this.getListobject());
    tv2.setAdapter(adapter2);





//some useless code ////////////////



 }

ActivityFragment

public class VenteActivity extends FragmentActivity {

private PagerAdapter mPagerAdapter;

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.viewpager2);
    creationPage();

}

public void creationPage() {
    // Creation of the list
    List<Fragment> fragments = new Vector<Fragment>();

    // Recovery
    Intent sender = getIntent();
    String extraData = sender.getExtras().getString("vente");
    Log.v("Vente activity", extraData);
    // Add Fragments in a list
    Fragment frag1 = PageOffreFragment.newInstance(extraData); // frag1 //
                                                                // anymor
    fragments.add(frag1);

    Fragment frag2 = PageAdjuFragment.newInstance(extraData); // frag2 //
                                                                // anymor
    fragments.add(frag2);

    Fragment frag3 = PagePartFragment.newInstance(extraData); // frag3 //
                                                                // anymor
    fragments.add(frag3);

    // Creation of theadapter
    this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments);
    final ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager2);

    // Affectation on the ViewPager
    //pager.setOffscreenPageLimit(1);
    pager.setAdapter(this.mPagerAdapter);


    pager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageScrollStateChanged(int arg0) {
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

        }

        @Override
        public void onPageSelected(int arg0) {

        }
    });

}

// Overide for blocking the BACK Key of android device
@Override
public void onBackPressed() {
}


}

Класс для работы над фрагментом:

public class VenteFragment extends Fragment {
protected static List<String> Listobject = null;
protected static List<String> Listpart = null;
protected static List<String> Listclient = null;
protected static String nomvente;

public List<String> getListobject() {
    return Listobject;
}

public void setListobject(List<String> listobject) {
    Listobject = listobject;
}

public List<String> getListpart() {
    return Listpart;
}

public void setListpart(List<String> listpart) {
    Listpart = listpart;
}

public List<String> getListclient() {
    return Listclient;
}

public void setListclient(List<String> listclient) {
    Listclient = listclient;
}


// Create the List of participant
public void InitClient() throws IOException {...}


// Create the List of participant
public void InitPart() throws IOException {
    Log.v("VFvente", this.nomvente);
    File DIR = new File(Environment.getExternalStorageDirectory() + "/Vente Acta/ListeVente/" + this.nomvente);
    final String ADDRESS_FILE = DIR.toString() + "/" + "participant.csv"; // l'emplacement
                                                                            // de
                                                                            // achat.csv
    Log.v("VFchemin", ADDRESS_FILE);
    // if the file doesn't exit, create the file
    File f = new File(ADDRESS_FILE);
    if (!f.exists()) {
        f.createNewFile();
        Log.v("VFvente", "ici");
        return;
    }

    List<String> data = new ArrayList<String>(); // liste contenant les
                                                    // element a adapter
                                                    // aux
                                                    // autotextview

    // on applique le reader sur le fichier
    CSVReader reader = new CSVReader(new FileReader(ADDRESS_FILE));
    List<String[]> liste = reader.readAll();
    int i = 0;
    for (String[] ligne : liste) {
        for (String col : ligne) {
            Log.v("ligne " + i, "col " + col);
        }
        i++;
    }
    for (String[] elem : liste) { // pour chaque ligne
        Log.v("VFdataelem0", elem[0]);
        Log.v("VFdataelem1", elem[1]);
        Log.v("VFdataelem2", elem[2]);
        data.add(elem[1] + " " + elem[2]); // le nom et prenom
        data.add(elem[0]); // le numero de participant pour la vente
    }

    reader.close();
    Log.v("VFvente", "fin");
    this.setListpart(data);
}

// Create the List of object
public void InitObjet() throws IOException {...}



}

Адаптер страницы открытый класс MyPagerAdapter расширяет FragmentStatePagerAdapter {

List<Fragment> fragments;
FragmentManager mFragmentManager;

// On fournit à l'adapter la liste des fragments à afficher
public MyPagerAdapter(FragmentManager fm, List fragments) {
    super(fm);
    this.fragments = fragments;
}

@Override
public Fragment getItem(int pos) {
    return this.fragments.get(pos);
}

@Override
public int getCount() {
    return this.fragments.size();
}
@Override
public int getItemPosition(Object object) {
       return POSITION_NONE;
    }
}

Я уже пробовал:

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

Или adapter2.setNotifyOnChange(true); или onResume НО , возможно, не в том месте

А также

pager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int i) {
            Log.d("onPageSelected: ", i + "");


            if(i == 0) {
                PageOffreFragment frg = (PageOffreFragment)mPagerAdapter.instantiateItem(pager, i);
                frg.onResume();
            } else if (i == 1){
                PageAdjuFragment frg = (PageAdjuFragment)mPagerAdapter.instantiateItem(pager, i);
                frg.onResume();

            }else if (i == 2) {
                PagePartFragment frg = (PagePartFragment)mPagerAdapter.instantiateItem(pager, i);
                frg.onResume();
            }

        }

В VenteActiivty

Ничего не получается :(

С созданием все в порядке, проблема в жизненном цикле моего фрагмента. (думаю) а где перезагрузить мой фрагмент для обновления списка данных моего ACTV

0
Lockon 20 Май 2014 в 13:43

2 ответа

Лучший ответ

Наконец, я нашел решение: это моя новая FragmentActivity:

 public class VenteActivity extends FragmentActivity {

private MyPagerAdapter mPagerAdapter;

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.viewpager2);
    creationPage();

}

public void creationPage() {
    // Creation of the list
    final List<Fragment> fragments = new Vector<Fragment>();

    // Recovery
    Intent sender = getIntent();
    final String extraData = sender.getExtras().getString("vente");
    Log.v("Vente activity", extraData);

    // Add Fragments in a list
    final Fragment frag1 = PageOffreFragment.newInstance(extraData); // frag1
    fragments.add(frag1);
    final Fragment frag2 = PageAdjuFragment.newInstance(extraData); // frag2
    fragments.add(frag2);
    final Fragment frag3 = PagePartFragment.newInstance(extraData); // frag3
    fragments.add(frag3);

    // Creation of theadapter
    this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments);
    final ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager2);

    // Affectation on the ViewPager
    // pager.setOffscreenPageLimit(1);
    pager.setAdapter(this.mPagerAdapter);
    pager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageSelected(int i) {
            Log.d("onPageSelected: ", i + "");
            mPagerAdapter.notifyDataSetChanged();
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }
    });

}

}

0
Lockon 21 Май 2014 в 10:33

Прежде чем вызывать notifychange, убедитесь, что вы сначала добавили новые данные в свой arraylist, а затем вызовите notify change.

0
Kosh 20 Май 2014 в 10:07