2

我在这个库的帮助下在 Scroll View 上使用 Pull to Refresh 工具

https://github.com/chrisbanes/Android-PullToRefresh

它工作得很好,而不是scrollTo(int,int);我下面的代码中的方法我在添加列表中的所有项目后最后使用了这个方法。

代码在这里。

public class MainActivity extends Activity {
PullToRefreshScrollView mPullRefreshScrollView;
LinearLayout listHolder;
ArrayList<String> list = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listHolder = (LinearLayout) findViewById(R.id.lay);

    // initial values in List
    for(int i =0;i<15;i++){
        list.add("InitialValue");
    }

    mPullRefreshScrollView = (PullToRefreshScrollView) findViewById(R.id.pull_refresh_scrollview);
    mPullRefreshScrollView
            .setOnRefreshListener(new OnRefreshListener<ScrollView>() {

                @Override
                public void onRefresh(
                        PullToRefreshBase<ScrollView> refreshView) {
                    new GetDataTask().execute();
                }
            });

    addJournal_Entry_page();
}

private class GetDataTask extends AsyncTask<Void, Void, String[]> {
    @Override
    protected String[] doInBackground(Void... params) {
        try {
            Thread.sleep(2000);
            for(int i =0;i<4;i++){
                list.add("InitialValue");
            }
        } catch (InterruptedException e) {
        }
        return null;
    }

    @Override
    protected void onPostExecute(String[] result) {
        // Do some stuff here

        // Call onRefreshComplete when the list has been refreshed.
        mPullRefreshScrollView.onRefreshComplete();
        addJournal_Entry_page();
        super.onPostExecute(result);
    }
}

private void addJournal_Entry_page() {

    View v;
    listHolder.removeAllViews();
    for (int i = 0; i < list.size(); i++) {
        v = this.getLayoutInflater().inflate(R.layout.list_row, null);
        TextView ind = (TextView)v.findViewById(R.id.index);
        TextView name = (TextView)v.findViewById(R.id.name);

        ind.setText(""+i);
        name.setText(list.get(i));

        listHolder.addView(v);
    }

    Resources r = getResources();
    float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
            100, r.getDisplayMetrics());

    //problem is Here
    mPullRefreshScrollView.scrollTo(0,(int)px);

}

}

PullToRefreshScrollView像这样在XML中定义

 <com.handmark.pulltorefresh.library.PullToRefreshScrollView
    xmlns:ptr="http://schemas.android.com/apk/res-auto"
    android:id="@+id/pull_refresh_scrollview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    ptr:ptrAnimationStyle="flip"
    ptr:ptrMode="pullFromStart" >

    <LinearLayout
        android:id="@+id/lay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    </LinearLayout>
</com.handmark.pulltorefresh.library.PullToRefreshScrollView>

我得到这样的结果

在此处输入图像描述

我的列表中有 15 个项目,因此它不应在列表底部显示空白。

非常感谢

4

1 回答 1

1

请在此代码下的 PullToRefreshScrollView.java 中添加这一行

最终类 InternalScrollViewSDK9 扩展 ScrollView{

@Override
      public void scrollTo(int x, int y) {
          // TODO Auto-generated method stub
          super.scrollTo(x, y);
      }

}

在此处输入代码。这个对我有用。

于 2013-07-03T12:54:54.000 回答