我正在使用ViewPager和Fragment来显示来自sqlite的数据。所有页面的内容都相同,因此我对所有页面都使用了相同的Fragment类。在片段中有一个TextView。活动中有两个按钮。
我正在尝试在从Activity中单击任何Button时更新TextView的文本。为此,我使用interface
并覆盖片段中的方法。一切正常。
注意:按钮位于“活动”中(所有页面都是通用的)
问题 当我按下按钮时,它将更新下一页的文本视图。例如。当我点击第1页的按钮时,第2页的textview将会更新,等等。
我使用了以下代码。任何帮助将是欣赏。感谢。
片段代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Create a new TextView and set its text to the fragment's section
// number argument value.
View view = inflater.inflate(R.layout.fragmentview, container, false);
txtAmount = (TextView) view.findViewById(R.id.txtAmount);
return view;
}
@Override
public void onPlusClick(String amount) {
// update textview here
}
@Override
public void onMinusClick(String amount) {
// update textview here
}
适配器代码
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a DummySectionFragment (defined as a static inner class
// below) with the page number as its lone argument.
Fragment fragment = new DummyFragment();
onClick = (onButtonClick) fragment;
return fragment;
}
@Override
public int getCount() {
// Show 3 total pages.
return arrModel.size();
}
@Override
public CharSequence getPageTitle(int position) {
return arrModel.get(position).fname;
}
活动代码
@Override
public void onClick(View v) {
if (v == btnMinus) {
onClick.onMinusClick(edtAmount.getText().toString());
} else if (v == btnPlus) {
onClick.onPlusClick(edtAmount.getText().toString());
}
}
答案 0 :(得分:1)
每次调用getItem时,您都会创建一个新片段,并将其分配给onClick,以便onClick引用最新的片段,在您的情况下为第二个片段。
尝试在适配器的构造函数中创建片段列表:
List<Fragment> fragments=new List<Fragment>();
Fragment currentFragment;
public Myadapter(){
fragments.add(new DummyFragment());
fragments.add(new DummyFragment());
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
public Fragment getCurrentFragment(){
return currentFragment;
}
@Override
public void setPrimaryItem(ViewGroup container, int position,
Object object) {
super.setPrimaryItem(container, position, object);
currentFragment=fragments.get(position);
}
然后在活动 -
public void onClick(View v) {
if (v == btnMinus) {
adapter.getCurrentFragment().onMinusClick(edtAmount.getText().toString());
} else if (v == btnPlus) {
adapter.getCurrentFragment().onPlusClick(edtAmount.getText().toString());
}
}