[Android初级]关于实现在阅读文章后保持上次阅读位置的方法即关于ScrollView的位置监听

    在android应用的开发中,可能会有这样的需求:在一款具有阅读功能的应用中,在打开电子文档、日志等长篇文章后,读了一大段之后,突然返回或者关闭后,等到下一次再打开阅读,依然是保持着上一次的阅读位置,这个情景很人性化。在android中如何实现呢?我在这里就试着说明一个方法,但不是唯一的解决方案。

    首先,日志内容一定是在ScrollView中的,假设是如下组件的设定:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/txt_tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </ScrollView>

</LinearLayout>

然后,在主要的java代码上如何去监听用户最后一次浏览到的位置:

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.srcolltest);
		mHandler = new Handler();
		mTextView = (TextView) findViewById(R.id.txt_tv);
		mScroolView = (ScrollView) findViewById(R.id.scrollview);
		mTextView.setText(getString(R.string.news_txt));
		mTextView.setTextSize(25.00f);
		//该方法是监控对ScorllView的触碰事件
		mScroolView.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				if(event.getAction() == MotionEvent.ACTION_MOVE){
					Log.i(TAG, "last time scrollY=>"+mScroolView.getScrollY());
				}
				return false;
			}
		});
	}

其次,当你获取了用户的浏览位置后,你需要保存到对应的对象中去,做好该用户的操作记录,如何实现?那是你的工作了大笑

在下次获取用户的操作记录后,根据这个数据,使用ScrollView.scrollto(x,y)即可实现。但是使用这个方法不是那样在onCreate里随便一写就能体现效果的。

应该这样做:

@Override
	protected void onResume() {
		mHandler.postDelayed(new Runnable() {
			@Override
			public void run() {
				mScroolView.scrollTo(0, lastScrollY);
			}
		}, 100);
		super.onResume();
	}
好了,基本使用就是这样。如果你有什么更好的方法,欢迎分享。

你可能感兴趣的:([Android初级]关于实现在阅读文章后保持上次阅读位置的方法即关于ScrollView的位置监听)