0

次の問題があります。ビューページャーと 2 つのタブを備えたアプリがあります。2 つのタブは 2 つのリストフラグメントです。ユーザーが最初のタブで項目を選択すると、2 番目のタブで 5 番目の項目が選択されるようになりました。(2 番目のタブは、最初の項目のテキストの翻訳です)。私の問題は、最初のタブで項目を選択し、2 番目のタブに切り替えると、何も選択されていないことです。最初のタブで何かをクリックすると、5 番目の項目を選択する必要がある 2 番目のフラグメントの関数を呼び出す親アクティビティの関数を呼び出します。Fragment アクティビティのコードは次のとおりです。

public class Dailyquran extends FragmentActivity implements ActionBar.TabListener {


    SectionsPagerAdapter mSectionsPagerAdapter;
    ViewPager mViewPager;


    public  ArrayList<Tweet> tweets = new ArrayList<Tweet>(); 
    public  ArrayList<Tweet> tweets2 = new ArrayList<Tweet>(); 
    //private static ArrayList<String> roomList;

    public String a;
    public static int laenge_inhalt;

    public static int selected;

    public static String sure_media;
    public static String vers_media;
    String koran_filename;
    //int tabwahl=0;

    int playstatus=0;
    MediaPlayer mp = new MediaPlayer();
    MenuItem playMenu;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_dailyquran, menu);
        playMenu = menu.findItem(R.id.menu_play);
        return true;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("Daily Quran");
        setContentView(R.layout.activity_dailyquran);        
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
        // Set up the action bar.
        final ActionBar actionBar = getActionBar();
        // set the app icon as an action to go home
        actionBar.setDisplayHomeAsUpEnabled(true); 
        //enable tabs in actionbar
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

     // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);

        mViewPager.setAdapter(mSectionsPagerAdapter);

     // When swiping between different sections, select the corresponding tab.
        // We can also use ActionBar.Tab#select() to do this if we have a reference to the
        // Tab.
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });

        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
            // Create a tab with text corresponding to the page title defined by the adapter.
            // Also specify this Activity object, which implements the TabListener interface, as the
            // listener for when this tab is selected.
            actionBar.addTab(
                    actionBar.newTab()
                            .setText(mSectionsPagerAdapter.getPageTitle(i))
                            .setTabListener(this));
        }




          main(); 

    }

    /*  WEITER UNTEN SIND DIE TABSELECTED FUNKTIONEN !!!!
    //@Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }

   // @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        // When the given tab is selected, switch to the corresponding page in the ViewPager.
        mViewPager.setCurrentItem(tab.getPosition());
    }

   // @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }    
    */

    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        private FragmentTransaction mCurTransaction = null;

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }


        @Override
        public int getItemPosition(Object object) {
           return POSITION_NONE; //To make notifyDataSetChanged() do something
       }

        @Override      
        public Fragment getItem(int i) {
          //  Fragment building_fragment = new BuildingFragment();
            Fragment room_fragment = new RoomFragment();
            Fragment transl_fragment = new TransliterationFragment();

          //  Fragment device_fragment = new DeviceFragment();
            Bundle args = new Bundle();

            switch(i){
            case 0:

                room_fragment.setArguments(args);

                return room_fragment;
            case 1:           

                return transl_fragment;
            case 2:  
            //  args.putInt(RoomFragment.ARG_SECTION_NUMBER, i);
            //    room_fragment.setArguments(args);
                return room_fragment;
            default: return null;
            } 
        }
        @Override
        public int getCount() {
            return 2;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0: return "a";
                case 1: return "b";
                case 2: return "c";
            }
            return null;
        }

        @Override
        public Object instantiateItem(View container, int position) {
            if (mCurTransaction == null) {
                mCurTransaction = getSupportFragmentManager().beginTransaction();
            }
            // TODO Auto-generated method stub
            Fragment fragment = getItem(position);

            if (fragment!=null){
                System.out.println("Fragment Found!");
                mCurTransaction.attach(fragment);
                }


            return fragment;//super.instantiateItem(container, position);
        }


    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.menu_play:
                play();
                return true;



            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        MenuItem switchButton = menu.findItem(R.id.menu_play);     



    }


    public class Tweet {  

        String content;  
        String sure;
        String vers;

}  

    public class Tweet2 {  

        String content;  
        String sure;
        String vers;

}  

public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
        // TODO Auto-generated method stub

        mViewPager.setCurrentItem(tab.getPosition());

    }

    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }



//HERE IS THE CODE FOR SELECTING THE SECOND ITEM

public void one_changed()
    {
        TransliterationFragment fragment_meaning = (TransliterationFragment) getSupportFragmentManager().findFragmentById(R.id.myfragment2);                
        Toast.makeText(getApplicationContext(),"Change Selection", Toast.LENGTH_SHORT).show(); 


        fragment_meaning.change_selected(); // do what updates are required   

    }

これは 2 番目のフラグメントの関連コードです。文字列「Hallo」がコンソールにあることがわかります。関数は実際に呼び出されますが、アイテムが選択されていません。

public void change_selected()
    {

        System.out.println("Hallo");
        ListView list=getListView();  
        list.setSelection(4);
    }
4

1 に答える 1

0

親アクティビティの関数 on_changed にこのコードを追加すると、現在動作しています:

TransliterationFragment fragment_meaning = (TransliterationFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:"+R.id.pager+":1");      
fragment_meaning.change_selected(); // do what updates are required 
于 2013-01-14T20:37:51.067 に答える