-1

こんにちは、このような質問が以前に何度かあったことは知っていますが、問題を解決する方法が見つかりませんでした。
やりたいこと:スワイプ ページ プロジェクトのメインアクティビティからリストビューに項目を追加したい。

私の主な活動

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を更新する必要があると思います。しかし、どうすればそれができるのかわかりません。

助けてくれてありがとう。

4

1 に答える 1

0

この notifyDataSetChanged() および registerDataSetObserver() メソッドをリストビュー アダプターに配置する必要があります。

private ArrayList<DataSetObserver> observers = new ArrayList<DataSetObserver>();

public void registerDataSetObserver(DataSetObserver observer) {
    observers.add(observer);
}
public void notifyDataSetChanged(){
    for (DataSetObserver observer: observers) {
        observer.onChanged();
    }
}     
于 2013-09-18T17:17:00.220 に答える