首页 > 解决方案 > 如何更改 ViewPager 中特定页面的 textView 的文本?

问题描述

如何更改 ViewPager 中特定页面的 textView 的文本?我想更改第二页(位置 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);
}

标签: androidandroid-studio

解决方案


您必须在 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;
} 

}

主要活动:

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();
    }
}

推荐阅读