画面の半分をスライドさせることは可能ですか?半分のスライドビューペイジャーと同時に2つのリストビューアンドロイド
私の究極の目標は、一度に2つのリストビューを表示することです。最初のページスライドの後、左のリストは前のリストになります。そこで、以下のように同様 ...
リスト1、
list2のLIST2、
LIST3、list4
どれソリューションLIST3?
おかげ
画面の半分をスライドさせることは可能ですか?半分のスライドビューペイジャーと同時に2つのリストビューアンドロイド
私の究極の目標は、一度に2つのリストビューを表示することです。最初のページスライドの後、左のリストは前のリストになります。そこで、以下のように同様 ...
リスト1、
list2のLIST2、
LIST3、list4
どれソリューションLIST3?
おかげ
はさて、私はこれで刺しを取るつもりです。私はあなたがやろうとしていることを達成しました。私のアプリケーションには3つのリストビューがあり、各リストにはオンラインソースから取り出されたさまざまなコンテンツが含まれており、ViewPager
にはカスタムアダプターとListViews
を設定しています。カスタムアダプターは、PagerAdapter
のfragment
に割り当てられます。 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()
で起こっていることに非常に細心の注意を払ってください。さて、FragmentPagerAdapter
とListSection 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がロードされます。これにより、新しいリストに移行する際に、既にロードされているか、生成中のプロセスに確実に反映されます。
したがって、複数のListView間をスライドできるようにするには、遷移が起こっているときに両方のリストビューが表示されますか? – burmat
@burmatはい正しい..リスト1から選択されたアイテム...リスト2が更新され、リスト2から選択されたアイテムが追加されました。リスト3が更新されました...など、2つを表示したいリスト、一度に選択したアイテムリスト、および第2のリスト – Bhaumik
次のViewPageでListViewを「繰り返す」はどうでしょうか?あなたの例では、3つのviewPagesがあります。 ViewPage1:list1、list2。 ViewPage2:list2、list3 ...このようにして、インターフェイスのやりとりはあなたが望むものになります。私はリストビューの管理が迷惑になるかどうかは分かりません。 –