android - 如何更改 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);
}
解决方案
您必须在 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();
}
}
推荐阅读
- javascript - 如何使用 Winforms cefsharp 执行 Google 地图搜索
- php - 将带有键的数组值添加到多维数组而不添加新的“层”
- javascript - 单击导航栏并更改图标颜色时如何激活导航栏
- amazon-web-services - CognitoIdentityClient - 在 iam/security-credentials 中找不到 404
- keras - LSTM 在实践中如何利用输入数据?
- python - 如何访问PANDAS python的数组内部数组
- android - 如何测试 api 请求并用假数据填充类?
- c# - 不访问 IIS 中的 xls 文件
- sms-verification - SMS 验证的替代方案
- docker - 使用多个 Docker 主机对 Dockerized Elasticsearch 进行集群