Актуализацията на AutoCompleteTextView arrayList не работи при промяна на фрагмента

Фрист, имам слаби английски умения.

Използвам android.support.v4.view.ViewPager и фрагмент.

Когато плъзна страницата с фрагмент, искам да актуализирам за адаптера AutoCompleteTextView.

опитайте
1.комбинация за (изчистване, настройка, уведомяване..) в onPageSelected(int position)

aList.clear();  
autoSearchAdapter.clear();  
autoTextView.setAdapter(autoSearchAdapter);  
autoSearchAdapter.notifyDataSetChanged();  
  1. използва манипулатор в onPageSelected(int position)

намек. понякога AutoCompleteTextView arrayList работи. (50%) и работи, след като напишете изречение в AutoCompleteTextView, плъзнете страницата. в този момент списъкът с масиви е разширен. също така се вижда целият списък.

част от кода
публичен клас MainActivity разширява ActionBarActivity {

static String uName;
TestAdapter demoPagerAdapter;
ViewPager mViewPager;

static AutoCompleteTextView autoTextView;
static ArrayAdapter<String> autoSearchAdapter;
public static ArrayList<String> aList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    //hide actionbar
    getSupportActionBar().hide();
    setContentView(R.layout.activity_main);
    // fragments, so use getSupportFragmentManager.
    demoPagerAdapter = new TestAdapter(getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(demoPagerAdapter);

    getAccountInfo();

    SetAutoSearchAdapter();

    KeyBoardHide();

}
private void SetAutoSearchAdapter(){
    //AutoCompleteTextView setting
    autoTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete_textview);
    aList=new ArrayList<String>();
    autoSearchAdapter =
            new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, aList);
    autosearchInit();
    autoTextView.setAdapter(autoSearchAdapter);

    //updating autosearch adapter
    mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {
            if (position == 0) {
                aList.clear();
                Toast.makeText(getApplicationContext(), "fragment 0", Toast.LENGTH_LONG).show();
                //autosearchInit();
                aList.add("aaaaaa00");
                aList.add("bbbbb00");
                aList.add("ccccc00");
                autoSearchAdapter.notifyDataSetChanged();
            } else if (position == 1) {
                Toast.makeText(getApplicationContext(), "fragment 1.", Toast.LENGTH_LONG).show();
                aList.clear();
                aList.add("aaaaaa11");
                aList.add("bbbbb11");
                aList.add("ccccc11");
                autoSearchAdapter.notifyDataSetChanged();
            } else if (position == 2) {
                Toast.makeText(getApplicationContext(), "fragment 2", Toast.LENGTH_LONG).show();
                aList.clear();
                autoSearchAdapter.clear();
                autoTextView.setAdapter(autoSearchAdapter);
                aList.add("aaaaa22");
                aList.add("bbbbb22");
                aList.add("ccccc22");
                autoSearchAdapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {
        }
    });
}

person sung uk park    schedule 08.07.2015    source източник
comment
правите това по грешен начин: изобщо няма нужда от setOnPageChangeListener, вижте отговора ми тук: stackoverflow.com/a/19860624/2252830   -  person pskink    schedule 08.07.2015
comment
не използвайте setOnPageChangeListener, как да проверя промяната на фрагмента?   -  person sung uk park    schedule 08.07.2015
comment
просто трябва да проверите коя е текущата страница в метода runQuery, това е всичко   -  person pskink    schedule 08.07.2015
comment
добре благодаря. не знам точно опитай да отговориш!   -  person sung uk park    schedule 08.07.2015


Отговори (1)


в autoSearchAdapter трябва да създадете метод за задаване на arry списък,

private ArrayList<Test> test;

Public void setAryList(ArrayList<Test> test){
this.test = test;
}

след като трябва да се обадиш

autoSearchAdapter.setAryList(aList);  
autoSearchAdapter.notifyDataSetChanged();  

работи като чар.

person Darshan Mistry    schedule 08.07.2015
comment
имате предвид да използвате персонализиран адаптер вместо [autoSearchAdapter = new ArrayAdapter‹String›(this, android.R.layout.simple_dropdown_item_1line, aList);]? - person sung uk park; 08.07.2015