मेरे पास एक व्यूपेजर है जिसमें एक ही खंड के कई उदाहरण हैं, इस खंड में एक लेख है। अनुच्छेद दृश्य पदानुक्रम काफी सरल है, एक शीर्षक, एक बैनर छवि, एक उपशीर्षक और एक शरीर; शीर्षक के अलावा सब कुछ एक स्क्रॉलव्यू में लपेटा गया है।ViewPager के अंदर स्क्रॉलव्यू, स्वचालित रूप से मध्य तक स्क्रॉल
समस्या है, जब आप किसी नए पृष्ठ पर स्वाइप करते हैं, तो टुकड़ा शीर्ष पर दृश्यों के साथ प्रस्तुत किया जाता है, और फिर यह तुरंत कंटेनर के बीच तक स्क्रॉल करता है। (वास्तव में यह आईडीवी के साथ टेक्स्ट व्यू की शुरुआत में स्क्रॉल करता है: article_content)
मैंने प्रश्न के निचले हिस्से में लेआउट पोस्ट किया है।
class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
Bundle args;
int count;
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
this.count = 8;
}
@Override
public Fragment getItem(int position) {
ArticleFragment mPrimaryFragment = new ArticleFragment();
args = new Bundle();
args.putString(ArticleFragment.KEY_ARTICLE_URL, mCurArticleLink);
mPrimaryFragment.setArguments(args);
return mPrimaryFragment;
}
@Override
public int getCount() {
return count;
}
}
टुकड़ा खुद भी बहुत सरल है:
अब, ViewPager एक FragmentStatePagerAdapter
का एक सरल कार्यान्वयन के साथ सेट कर दिया जाता है, यहाँ कोड है। सबसे पहले, मैं onCreate
दौरान जाँच अगर हम लेख कैश्ड, पर onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.apk_article_view, null);
mTitle = (TextView) view.findViewById(R.id.article_title);
mBanner = (ImageView) view.findViewById(R.id.article_banner);
mSubTitle = (TextView) view.findViewById(R.id.article_subtitle);
mContent = (TextView) view.findViewById(R.id.article_content);
if (isArticleCached) {
Constants.logMessage("Article is cached, loading from database");
setApkArticleContent();
}
else {
Constants.logMessage("Article isn't cached, downloading");
HtmlHelper.setApkArticleContent(mContext, mUrl, mTitle, mSubTitle, mContent, mBanner);
setRefreshing(true);
}
return view;
}
यह ध्यान देने योग्य है कि setApkArticleContent
ग्रंथों का एक सरल सेट है लायक है मैं कॉल, फैंसी कुछ भी नहीं है देखने के लिए:
private void setApkArticleContent() {
mTitle.setText(Html.fromHtml(mCursor.getString(mCursor.getColumnIndex(DbOpenHelper.TITLE))));
mSubTitle.setText(Html.fromHtml(mCursor.getString(mCursor.getColumnIndex(DbOpenHelper.SUBTITLE))));
mContent.setText(Html.fromHtml(mCursor.getString(mCursor.getColumnIndex(DbOpenHelper.BODY))));
UrlImageViewHelper.setUrlDrawable(mBanner, mCursor.getString(mCursor.getColumnIndex(DbOpenHelper.BANNER)));
}
साथ ही, कृपया यह जान लें कि मेरे पास से पहले पेजर नहीं था, तो टुकड़ा केवल खाली गतिविधि पर लोड किया गया था, और स्क्रॉलव्यू के बीच स्क्रॉल किए बिना काम किया।
मुझे सच में यकीन नहीं है कि स्क्रॉल को ट्रिगर करने वाला क्या है, और हाँ, मुझे पता है कि मैं इसे प्रोग्रामिंग के रूप में लोड करने के बाद शीर्ष पर स्क्रॉल करने के लिए प्रोग्राम कर सकता हूं, लेकिन फिर, यह दो स्क्रॉल आंदोलन होगा जब टुकड़ा लोड हो जाएगा और यह उपयोगकर्ता के लिए काफी ध्यान देने योग्य होगा।
क्या आपके पास कोई विचार है कि यह ऐसा क्यों व्यवहार करेगा? इस बारे में कोई विचार कि मैं उस अनजाने स्क्रॉल को कैसे रोक सकता हूं?
धन्यवाद,
नीचे ArticleFragment के लिए लेआउट है:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/article_title"
style="@style/headerTextBoldNoUnderline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:text="" />
<ScrollView
android:layout_height="match_parent"
android:layout_width="match_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_height="wrap_content"
android:layout_width="match_parent"
>
<ImageView
android:id="@+id/article_banner"
android:layout_gravity="center_vertical|center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="12dp" />
<TextView
android:id="@+id/article_subtitle"
style="@style/HeaderTextItalicNoUnderline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left|center_vertical" />
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="?android:attr/dividerVertical" />
<TextView
android:id="@+id/article_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-light"
android:gravity="left|center_vertical"
android:padding="8dp"
android:textColor="?android:attr/textColorSecondary"
android:textIsSelectable="true"
android:textSize="16sp" />
</LinearLayout>
</ScrollView>
</LinearLayout>
क्या आपने ScrollView पर 'android: descendantFocusability' के साथ गड़बड़ करने का प्रयास किया है? –
बस किया, मैंने वास्तव में इसके लिए सभी तीन मानों की कोशिश की, सभी तीनों के लिए एक ही परिणाम मिला, स्क्रॉलव्यू अभी भी बीच में स्क्रॉल करता है। –
नोट: आपको 'एंड्रॉइड: फोकस करने योग्य = सत्य' और 'एंड्रॉइड:' एंड्रॉइड के लिए फोकस करने योग्य इंटचौडोड = सत्य' 'का उपयोग करने की आवश्यकता हो सकती है: अवरोधक फोकसबिलिटी = पहले डिस्केन्डेंट्स'। मुझे संदेह है कि मुद्दे 'एंड्रॉइड: टेक्स्ट ISelectable' को शामिल करने में आधारित हैं। नियंत्रण के रूप में इसे हटाने का भी प्रयास करें। –