こんにちは、このような質問が以前に何度かあったことは知っていますが、問題を解決する方法が見つかりませんでした。
やりたいこと:スワイプ ページ プロジェクトのメインアクティビティからリストビューに項目を追加したい。
私の主な活動
public class MainActivity extends SherlockFragmentActivity {
// Declare Variables
ActionBar mActionBar;
ViewPager mPager;
Tab tab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the view from activity_main.xml
setContentView(R.layout.activity_main);
final Context context = getApplicationContext();
for (int s = 0; s < 10; s++) {
Swap.stafu1.add("F" + s);
Swap.stafu2.add("F" + s);
}
// Activate Navigation Mode Tabs
mActionBar = getSupportActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Locate ViewPager in activity_main.xml
mPager = (ViewPager) findViewById(R.id.pager);
// Activate Fragment Manager
FragmentManager fm = getSupportFragmentManager();
// Capture ViewPager page swipes
ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
// Find the ViewPager Position
mActionBar.setSelectedNavigationItem(position);
if (position == 1) {
Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.d("bingo", "clicked" + Swap.stafu1.size());
Swap.stafu1.add("sometext");
Swap.stafu2.add("sometext");
Swap.stafu1.remove(0);
Swap.stafu2.remove(0);
FragmentTab2 f2 = new FragmentTab2();
f2.nDChanged();
}
});
}
}
};
mPager.setOnPageChangeListener(ViewPagerListener);
// Locate the adapter class called ViewPagerAdapter.java
ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm);
// Set the View Pager Adapter into ViewPager
mPager.setAdapter(viewpageradapter);
// Capture tab button clicks
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// Pass the position on tab click to ViewPager
mPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
};
// Create first Tab
tab = mActionBar.newTab().setText("Tab1").setTabListener(tabListener);
mActionBar.addTab(tab);
// Create second Tab
tab = mActionBar.newTab().setText("Tab2").setTabListener(tabListener);
mActionBar.addTab(tab);
// Create third Tab
tab = mActionBar.newTab().setText("Tab3").setTabListener(tabListener);
mActionBar.addTab(tab);
}
}
FragmentTab2.java
public class FragmentTab2 extends SherlockFragment {
ListView list;
ListViewAdapter adapter;
@Override
public SherlockFragmentActivity getSherlockActivity() {
return super.getSherlockActivity();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragmenttab2, container,
false);
// Locate the ListView in fragmenttab1.xml
list = (ListView) rootView.findViewById(R.id.listview);
// Pass results to ListViewAdapter Class
adapter = new ListViewAdapter(getActivity(), Swap.stafu1, Swap.stafu2);
// Binds the Adapter to the ListView
list.setAdapter(adapter);
return rootView;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
setUserVisibleHint(true);
}
public void nDChanged() {
Log.d("bingo", "clicked"+Swap.stafu1.size());
adapter = new ListViewAdapter(getActivity(), Swap.stafu1, Swap.stafu2);
adapter.notifyDataSetChanged();
}
}
スワップ Java
public class Swap {
public static ArrayList<String> stafu1=new ArrayList<String>();
public static ArrayList<String> stafu2=new ArrayList<String>();
}
問題:リストビューから 1 つの項目を削除するまで、notifyDataSetChanged() は機能しません。つまり、リストビューで項目を増やすことができません。
notifyDataSetChanged() を使用しない場合、テキストを Swap.stafu1 と Swap.stafu1 に追加できます。これは、ページをスワイプしてページをスワイプして fragmenttab2 に戻すと、リストビューに表示されます。
リストビューにアイテムを追加するたびに、リストビューまたはfragmenttab2を更新する必要があると思います。しかし、どうすればそれができるのかわかりません。
助けてくれてありがとう。