Ich habe eine 'Seite', die eine Reihe von Komponenten enthält und deren Inhalt länger als die Höhe des Geräts ist. Gut, setzen Sie einfach das gesamte Layout (die gesamte Seite) in ein ScrollView
, kein Problem.
Eine der Komponenten ist a ViewPager
. Dies wird korrekt gerendert, aber die Reaktion auf ein Wischen / Schleudern funktioniert nicht richtig, es ist nervös und funktioniert nicht immer. Es scheint mit dem 'verwechselt' zu werden ScrollView
, funktioniert also nur zu 100%, wenn Sie in einer exakten horizontalen Linie fliegen.
Wenn ich das entferne ScrollView
, reagiert der ViewPager perfekt.
Ich habe eine Suche durchgeführt und dies nicht als bekannten Defekt gefunden. Hat das noch jemand erlebt?
- Plattformversion: 1.6
- Kompatibilitätsbibliothek v4.
- Gerät: HTC Incredible S.
Im Folgenden finden Sie einen Beispielcode, mit dem Sie testen können. Kommentieren Sie ihn aus ScrollView
, damit er ordnungsgemäß funktioniert.
Aktivität:
package com.ss.activities;
import com.ss.R;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.TextView;
public class PagerInsideScollViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewPager vp = (ViewPager) findViewById(R.id.viewpager);
vp.setAdapter(new MyPagerAdapter(this));
}
}
class MyPagerAdapter extends PagerAdapter {
private Context ctx;
public MyPagerAdapter(Context context) {
ctx = context;
}
@Override
public int getCount() {
return 2;
}
@Override
public Object instantiateItem(View collection, int position) {
TextView tv = new TextView(ctx);
tv.setTextSize(50);
tv.setTextColor(Color.WHITE);
tv.setText("SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, " +
"SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, " +
"SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, " +
"SMILE DUDE, SMILE DUDE, SMILE DUDE");
((ViewPager) collection).addView(tv);
return tv;
}
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public void startUpdate(View arg0) {
}
@Override
public void finishUpdate(View arg0) {
}
}
Layout:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="300dp" />
</LinearLayout>
</ScrollView>