2

ViewPagerExtension ライブラリhttps://github.com/astuetz/ViewPagerExtensionsを使用してスクロール タブ ビューを使用しています。イベントのリストを含む場所のリストがあり、各場所のタブを表し、各タブ内にイベントのリストビューを表示したいと考えています。

これまでのところ、問題なく表示できました。ユーザーがイベントの 1 つをクリックした後、正しい場所イベントを回復しようとすると、問題が発生します。

OnItemClickListener を設定すると、リストビュー内でのそのイベントの位置を取得できますが、どのイベントかはわかりませんし、どのように復元できるかもわかりません。

以下のコードは私がこれまでに持っていたもので、OnPageChangeListener を親の ViewPager に追加しようとしましたが、うまくいかないようです。

public class CustomPageAdapter extends PagerAdapter {

protected transient Activity mContext;

private ArrayList<Location> locations;

private EventAdapter eventAdapter;
private ArrayList<Event> events;

public CustomPageAdapter(Activity context, ArrayList<Location> locations) {
    this.mContext = context;
    this.locations = locations;
}

@Override
public int getCount() {
    return this.locations.size();
}

@Override
public Object instantiateItem(View container, int position) {

    ListView listView = new ListView (mContext);

    events = this.locations.get(position).getEvents();
    eventAdapter = new EventAdapter(mContext, R.layout.event_item, events);
    listView.setAdapter(eventAdapter);
    listView.setPadding(10, 10, 10, 10);
    listView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.textured_paper));
    listView.setDivider(mContext.getResources().getDrawable(R.drawable.textured_paper));
    listView.setDividerHeight(30); // always after setDivider()
    listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int itemPosition,
                long id) {

            Event clickedEvent = events.get(itemPosition);

        }

    });
    ((ViewPager) container).addView(listView, 0);
    return listView;
}

@Override
public void destroyItem(View container, int position, Object view) {
    //((ViewPager) container).removeView((View) view);
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == ((View) object);
}

@Override
public void finishUpdate(View container) {}

@Override
public void restoreState(Parcelable state, ClassLoader loader) {}

@Override
public Parcelable saveState() {
    return null;
}

@Override
public void startUpdate(View container) {}

}

私の質問は、関係の場所とイベントを保持できる方法はありますか? OnItemClick が起動されたときに、現在どのタブにいるのかがわかりますか?

ご助力ありがとうございます!

解決

各ListViewにタグを付けることで解決できました:

listView.setTag(position);

そしてそれを回復します:

@Override
        public void onItemClick(AdapterView<?> parent, View view, int itemPosition,
                long id) {

            int tabPos = (Integer) parent.getTag();
            Event clickedEvent = events.get(itemPosition);

        }

ここで解決策を見つけましたAndroid ViewPager get current View

ご協力ありがとうございました :)

4

0 に答える 0