2013-01-16 7 views
5

Jestem nowy w Android programming.Jak ustawić stronę bieżącą w programie ViewPager zgodnie z wyborem użytkownika i skąd wiadomo, która pozycja listy nazywa się aktywnością

Mam listę przedmiotów, kiedy użytkownik klika element, który zaprowadzi go na ekran z danymi tego przedmiotu.

Chcę, aby użytkownik miał możliwość przesuwania palcem w prawo iw lewo, aby wyświetlić szczegóły innych przedmiotów na liście, zamiast wrócić do listy i wybrać inny element.

Przeczytałem, że muszę użyć ViewPager, aby przesuwać palcem w prawo iw lewo, więc zrobiłem to.
ViewPager działa dobrze, ale mój problem po kliknięciu dowolnego elementu na liście zawsze trafiam na pierwszą stronę w ViewPager.

Nie chcę tego, czego chcę, jeśli kliknę na pozycję 4 na liście, zabiorę mnie na stronę 4 w okienku podglądu i nadal będę miał możliwość przesuwania palcem w prawo iw lewo, aby wyświetlić szczegóły innych przedmiotów.
W jaki sposób ustawić stronę w viewpager przez using mPager.setCurrentItem(0)
Ale nie wiem jak ustawić go zgodnie z którym element został wybrany z listy (tj. Który element uruchomił działanie).

Oto mój kod:

Główna działalność, która zawiera ListView:

public class Main extends SherlockListActivity implements OnItemClickListener { 

     @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 

      ListView mylist = (ListView) findViewById(android.R.id.list); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.simple_list_reda_1, R.id.list_content, getResources().getStringArray(R.array.items_list_array)); 
      mylist.setAdapter(adapter); 

      mylist.setOnItemClickListener(new OnItemClickListener() 
      { 
       public void onItemClick(AdapterView<?> arg0,View arg1, int position, long arg3) 
       { 
        Intent n = null; 
        switch (position){ 
         case 0: 
          n = new Intent(getApplicationContext(), ViewPagerClass.class); 
          break; 
         case 1: 
          n = new Intent(getApplicationContext(), ViewPagerClass.class); 
          break; 
         case 2: 
          n = new Intent(getApplicationContext(), ViewPagerClass.class); 
          break; 
         case 3: 
          n = new Intent(getApplicationContext(), ViewPagerClass.class); 
          break; 
        } 

        if(null!=n) 
         startActivity(n); 
       } 
      });  
     } 
    } 

ViewPagerClass

public class ViewPagerClass extends SherlockFragmentActivity{ 

     static final int NUM_ITEMS = 4; 
     MyAdapter mAdapter; 
     ViewPager mPager; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      super.setContentView(R.layout.viewpager_layout); 

      mAdapter = new MyAdapter(getSupportFragmentManager()); 
      mPager = (ViewPager) findViewById(R.id.viewpager); 
      mPager.setAdapter(mAdapter); 
      //mPager.setCurrentItem(2); 

       final ActionBar ab = getSupportActionBar(); 
       ab.setDisplayHomeAsUpEnabled(true); 
       ab.setDisplayUseLogoEnabled(false); 
       ab.setDisplayShowHomeEnabled(false); 


    } 

    public static class MyAdapter extends FragmentPagerAdapter { 
     public MyAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public int getCount() { 
      return NUM_ITEMS; 
     } 

     @Override 
     public Fragment getItem(int position) { 

      switch(position){ 
      case 0: return FirstPageFragment.newInstance(); 

      case 1: return SecondPageFragment.newInstance(); 

      case 2: return ThirdPageFragment.newInstance(); 

      case 3: return FourthPageFragment.newInstance(); 

      } 
      return null; 
     } 
    } 



    public static class FirstPageFragment extends Fragment { 

     public static FirstPageFragment newInstance() { 
      FirstPageFragment f = new FirstPageFragment(); 
      return f; 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View V = inflater.inflate(R.layout.fragment1, container, false); 
      return V; 

     } 
    } 

    public static class SecondPageFragment extends Fragment { 

     public static SecondPageFragment newInstance() { 
      SecondPageFragment f = new SecondPageFragment(); 
      return f; 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View V = inflater.inflate(R.layout.fragment2, container, false); 
      return V; 

     } 
    } 

    public static class ThirdPageFragment extends Fragment { 

     public static ThirdPageFragment newInstance() { 
      ThirdPageFragment f = new ThirdPageFragment(); 
      return f; 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View V = inflater.inflate(R.layout.fragment3, container, false); 
      return V; 

     } 
    } 


    public static class FourthPageFragment extends Fragment { 

     public static ThirdPageFragment newInstance() { 
      ThirdPageFragment f = new ThirdPageFragment(); 
      return f; 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View V = inflater.inflate(R.layout.fragment4, container, false); 
      return V; 

     } 
    } 

Wreszcie viewpager_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
> 

<android.support.v4.view.ViewPager 
android:id="@+android:id/viewpager" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 

Tak w skrócie co chcę jest: Jeśli kliknę na pozycji 3 w wykazie I przejść do ekranu ze szczegółami pkt 3, i jeśli przesuń w prawo dostać się do punktu 4, i jeśli przesunę w lewo, dojdę do pozycji 2.

Odpowiedz

14

W numerze onItemClickListener() należy dodać dodatkową wartość do intencji, aby można było ją uzyskać po uruchomieniu tej czynności.

n.putExtra("POSITION_KEY", position); 

W ViewPagerClassonCreate() pomocą

int position = getIntent().getIntExtra("POSITION_KEY", 0); 
mPager.setCurrentItem(position); 

To powinien robić to, czego chce zrobić.

+0

"Wiem, jak ustawić stronę w przeglądarce podglądu za pomocą mPager.setCurrentItem (0) Ale nie wiem jak ustawić go zgodnie z którym element został wybrany z listy (tj. Który element uruchomił działanie). Mam nadzieję, że moje pytanie jest jasne. Wydawało mi się, że chciał wiedzieć, jak ustawić pozycję, która została kliknięta w ViewPager – draksia

Powiązane problemy