Как изменить текст textView определенной страницы в ViewPager? - PullRequest
0 голосов
/ 08 июля 2019

Как изменить текст textView определенной страницы в ViewPager? Я хочу изменить текст второй страницы (позиция 1). Я попытался в instantiateItem адаптироваться, но он изменяет последнюю или первую страницу.

@NonNull
@Override
public Object instantiateItem(@NonNull final ViewGroup container, final int position) {

    layoutInflater = layoutInflater.from(context);
    View view = layoutInflater.inflate(R.layout.item_menu, container, false);
    reponse1 = view.findViewById(R.id.text1);


    reponse1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

                reponse1.setText("FAUX");

        }
    });
    return view;
}

На моей главной:

private void init_adapter(){
    modelList = new ArrayList<>();
    //Inflate
    modelList.add(new Model(R.drawable.photo0, "Commencer", "", "", "","", 0, ""));
    modelList.add(new Model(R.drawable.photo1, "Ose faire ______ ce que tu redoutais hier.", "Ose faire aujourd'hui ce que tu redoutais hier", "Demain", "Aujourd'hui", "Dans un ans", 2, "01"));
    modelList.add(new Model(R.drawable.photo2, "Ton temps est _____, nattends plus.", "Ton temps est limité, n'attends plus.", "Infinie", "Limité", "Gratuit", 2, "02"));


    adapter = new Adapter(modelList, this);
    viewPager = findViewById(R.id.viewPager);
    viewPager.setAdapter(adapter);
}

1 Ответ

0 голосов
/ 08 июля 2019

Вы должны изменить значение внутри вашей модели в modelList, затем вызвать adapter.notifyDatasetChanged();

Если вы находитесь внутри фрагментов, вы можете использовать интерфейс или что-то вроде EventBus для уведомления о событиях родительской активности. как пример:

Фрагмент

public class YourFragment extends Fragment {

public YourFragment() {
    // Required empty public constructor
} 

Model model;
int position;
public static YourFragment newInstance(Model model , int position) {
    YourFragment fragment = new YourFragment();
    Bundle args = new Bundle();
    args.putSerializable("model" , model);
    args.putInt("position"   , position);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        model  = getArguments().getSerializable("model");
        position  = getArguments().getInt("position");
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) { 
    View view =  inflater.inflate(R.layout.fragment_layout, container, false);


    //initViews  
    reponse1.setOnClickListener((View.OnClickListener) v -> {
        String newText = "SomeThing";
        MainActivity.listener.onItemClicked(position , newText);
    }); 
    return  view;
} 

}

MainActivity:

public class MainActivity extends AppCompatActivity {

 List<Model> modelList ;
 SectionsPagerAdapter mSectionsPagerAdapter ;

 private interface ItemClickListener {
   void onItemClicked(int position , String newText);
 }





 public static ItemClickListener listener = new ItemClickListener(){

    @Override
    public void onItemClicked(int position , String newText){
        Model model = modelList.get(position);
        model.setText(newText);
        modelList.set(position , model);
        adapter.notifyDatasetChanged();
    }

 }


     @Override
    public void onCreate(args...){
       //init views
       init_adapter();
    }





 private void init_adapter(){
      modelList = new ArrayList<>();
      //Inflate
      modelList.add(new Model(R.drawable.photo0, "Commencer", "", "", "","", 0, ""));
      modelList.add(new Model(R.drawable.photo1, "Ose faire ______ ce que tu redoutais hier.", "Ose faire aujourd'hui ce que tu redoutais hier", "Demain", "Aujourd'hui", "Dans un ans", 2, "01"));
      modelList.add(new Model(R.drawable.photo2, "Ton temps est _____, nattends plus.", "Ton temps est limité, n'attends plus.", "Infinie", "Limité", "Gratuit", 2, "02"));



      mSectionsPagerAdapter = new            
      SectionsPagerAdapter(getChildFragmentManager());


      viewPager = findViewById(R.id.viewPager);
      viewPager.setAdapter(mSectionsPagerAdapter);
      }
  }

Адаптер фрагмента:

 public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int position) {
        YourFragment.newInstance(modelList.get(position) , position);  
    }

    @Override
    public int getCount() {
       return modelList.size();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...