2013-01-16 4 views
5

画面の半分をスライドさせることは可能ですか?半分のスライドビューペイジャーと同時に2つのリストビューアンドロイド

私の究極の目標は、一度に2つのリストビューを表示することです。最初のページスライドの後、左のリストは前のリストになります。そこで、以下のように同様 ...

リスト1、

list2のLIST2、

LIST3、list4

どれソリューションLIST3?

おかげenter image description here

+0

したがって、複数のListView間をスライドできるようにするには、遷移が起こっているときに両方のリストビューが表示されますか? – burmat

+0

@burmatはい正しい..リスト1から選択されたアイテム...リスト2が更新され、リスト2から選択されたアイテムが追加されました。リスト3が更新されました...など、2つを表示したいリスト、一度に選択したアイテムリスト、および第2のリスト – Bhaumik

+0

次のViewPageでListViewを「繰り返す」はどうでしょうか?あなたの例では、3つのviewPagesがあります。 ViewPage1:list1、list2。 ViewPage2:list2、list3 ...このようにして、インターフェイスのやりとりはあなたが望むものになります。私はリストビューの管理が迷惑になるかどうかは分かりません。 –

答えて

1

はさて、私はこれで刺しを取るつもりです。私はあなたがやろうとしていることを達成しました。私のアプリケーションには3つのリストビューがあり、各リストにはオンラインソースから取り出されたさまざまなコンテンツが含まれており、ViewPagerにはカスタムアダプターとListViewsを設定しています。カスタムアダプターは、PagerAdapterfragmentに割り当てられます。 Googleのコードから多くのコードをコピーして、私が行ったことを概説しようとします。

まず、私は私のMainActivityのための私のレイアウトに

activity_main.xml ViewPagerを追加しました:

:次に

<android.support.v4.view.ViewPager 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 
    <!-- add a PagerTitleStrip --> 
    <android.support.v4.view.PagerTitleStrip 
     android:id="@+id/pager_title_strip" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top"/> 
</android.support.v4.view.ViewPager> 

を、私は私のカスタム・アダプターのために使用することができます別のListViewレイアウトを作成しました

listview.xml

<ListView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="#E6E6E6" 
    android:background="#E6E6E6" 
    tools:context=".MainActivity" /> 

私はこれらのセットをした後、私は私の活動に掘った。残りはMainActivity.java内で起こる:

まず、いくつかの変数をレイアウト:

public class MainActivity extends FragmentActivity implements OnNavigationListener { 

    // your pager adapter 
    SectionsPagerAdapter mSectionsPagerAdapter; 
    ViewPager mViewPager; 

    // your custom adapters (look this up on your own if you do not understand) 
    ArrayList<ListEntry> listOneArrayList = null; 
    ArrayList<ListEntry> listTwoArrayList = null; 
    CustomAdapterListOne customAdapterListOne = null; 
    CustomAdapterListTwo customAdapterListTwo = null; 


    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // more on that in the next block... 
    } 
} 

それでは、onCreate()に入ると作成を開始しましょう!

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // set up your pager adapter 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
    mViewPager = (ViewPager) findViewById(R.id.viewpager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    // if you want to set a default view: 
    mViewPager.setCurrentItem(0); 

    // now, run some AsyncTasks to load up our lists 
    // I use AsyncTasks because I fetch my data from a server 
    new generateListOne().execute(); 
    new generateListTwo().execute(); 

} 


/* 
* Get the entries and create a list adapter 
*/ 
private class generateListOne extends AsyncTask<String, Void, Object> {  
    @Override 
    protected Object doInBackground(String... args) { 
     listOneArrayList = new ArrayList<ListEntry>(); 
     // this is where I would do all of my networking stuff 
     // and populate my arraylist 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Object result) { 
     // you have to create a new xml layout for 'listview_row' to use here v 
     customAdapterListOne = new CustomAdapterListOne(self, R.layout.listview_row, listOneArrayList); 
     /** Very important! This is where you specify where the list goes: **/ 
     // * Note: Fragment pages start at 0! 
     ListSectionFragment fragment = (ListSectionFragment) getSupportFragmentManager().findFragmentByTag(
      "android:switcher:"+R.id.viewpager+":0"); // <- this is where you specify where the list goes  
     if (fragment != null) {     // <- Could be null if not instantiated yet 
      if(fragment.getView() != null) { 
       customAdapterListOne.notifyDataSetChanged(); 
       fragment.updateListOneDisplay(customAdapterListOne); 
      } 
     }   
    }  
} 

I)は、(generateListTwoを書くつもりはないんだけど、うまくいけば、あなたは)generateListOne(からの概念を理解しています。 onPostExecute()で起こっていることに非常に細心の注意を払ってください。さて、FragmentPagerAdapterListSection Fragmentを書き出す必要があります。また、カスタムリストアダプターも含める必要があります。その原料のすべては、次のとおりです。

/* 
* Your Custom Adapter Class 
*/  
private class CustomAdapterListOne extends ArrayAdapter<ListEntry> { 
    /* 
    * Read up on the rest of this for custom adapter if you 
    * are unfamilar. There are plenty of resources.. 
    * 
    * I am not going to type it all out. 
    */ 
} 

/* 
* SectionsPagerAdapter class for FragmentPagerAdapter title 
*/ 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 
    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
     Fragment fragment = new ListSectionFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ListSectionFragment.ARG_SECTION_NUMBER, i + 1); 
     fragment.setArguments(args); 
     return fragment;    
    } 

    @Override 
    public int getCount() { 
     // make sure this is correct 
     int yourNumberOfLists = 5; 
     return yourNumberOfLists; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: return "First List"; 
      case 1: return "Second List"; 
      //case 2: etc.. 

     } 
     return null; 
    } 

    public boolean onInterceptTouchEvent(MotionEvent event) { 
     return false; 
    } 
} 

/* 
* ListSectionFragment class for ListFragment(s) 
*/ 
public static class ListSectionFragment extends ListFragment { 

    public static final String ARG_SECTION_NUMBER = "section_number"; 
    public static int CURRENT_SECTION = 0; 

    static ListSectionFragment newInstance(int num) { 
     ListSectionFragment fragment = new ListSectionFragment(); 
     Bundle args = new Bundle(); 
     fragment.setArguments(args); 
     return fragment;   
    } 

    public void updateListOneDisplay(ArrayAdapter<ListEntry> listOneAdapter) { 
     setListAdapter(listOneAdapter); 
    } 

    public void updateListTwoDisplay(ArrayAdapter<ListEntry> listTwoAdapter) { 
     setListAdapter(listTwoAdapter); 
    } 

    // etc.. 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Bundle args = getArguments(); 
     CURRENT_SECTION = args.getInt(ARG_SECTION_NUMBER); 
     // note, we are using your listview here v 
     View view = inflater.inflate(R.layout.listview, container, false); 
     return view; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // and just for kicks: 
     Log.i(TAG, "Item clicked: " + position); 
    } 

} 

MainActivity.javaクラスを閉じるためにあなたの最後の}を忘れないでください。うまくいけば、これは誰かを助け、私はそれが永遠に把握するのを知った。このコードが提供する効果はAndroid Placeアプリケーションの効果と似ています。

編集:リストが読み込まれたときに私は言及しなかった。リストにフォーカスが得られると、前と次のリストもロードされます。これにより、それに移行することが可能になり、すでに準備ができています。例:

リスト2に移動し、リスト1とリスト3がロードされます。その後、リスト3に移動します(すでにロードされているのでスムーズに移行します)。リスト4とリスト2がロードされます。これにより、新しいリストに移行する際に、既にロードされているか、生成中のプロセスに確実に反映されます。

関連する問題