2016-03-22 16 views
0

私はsqliteからリストビューを表示しようとしています。リストビューの終わりに、次の10個のデータをsqliteからロードします。このプロセスはデータがSQLiteで終了するまで続きます。しかし、問題は初めてデータが正常に読み込まれ、3回目のページ/データが読み込まれず、LocalListPageIndex = 2の後にプログレスバーが連続して実行されているときです。リストビューをAndroidでリストビューのスクロールの最後に更新する方法は?

私のコードはListViewのスクロールです。

listView.removeFooterView(progressBar); 
    listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
     } 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, final int totalItemCount) { 

      lastInScreen = firstVisibleItem + visibleItemCount; 

      if (X != firstVisibleItem) { 
       if (LocalListPageIndex <= 5) { 
        Toast.makeText(getApplicationContext(), "Your Last Item." + lastInScreen, Toast.LENGTH_SHORT).show(); 

        if (lastInScreen == totalItemCount) { 

         listView.addFooterView(progressBar); 

         // Execute some code after 15 seconds have passed 
         Handler handler = new Handler(); 
         handler.postDelayed(new Runnable() 
         { 
          public void run() 
          { 
           LocalListPageIndex += 1; 

           int OFFSET_SCROLL = 10 
           List<All_Post> allDesc = dbhelper.getAllDescriptions(OFFSET_SCROLL); 
           for (All_Post all_Post : allDesc) { 
            descArray.add(all_Post); 
           } 
           if (adapter != null) { 
            adapter.notifyDataSetChanged(); 
            // adapter = new AllPostAdapter(getApplicationContext(), R.layout.allpostlist, descArray); 
            listView.setAdapter(adapter); 
            //listView.invalidateViews(); 
            listView.setSelection(totalItemCount); 

           } 
          } 
         }, 15000); 
        } 

       } if (LocalListPageIndex == 5) { 
        Log.e("hide footer", "footer hide"); 
        listView.removeFooterView(progressBar); 
       } 
      } 
      X = firstVisibleItem; 

     } 
    }); 

答えて

0

あなたはRecyclerViewを使用して試みることができる: RecyclerViewウィジェットは、リストビューのより高度で柔軟なバージョンです。このウィジェットは、限られた数のビューを維持することによって非常に効率的にスクロールできる大きなデータセットを表示するためのコンテナです。ユーザーアクションまたはネットワークイベントに基づいて実行時に要素が変更されるデータコレクションがある場合は、RecyclerViewwidgetを使用します。

レイアウトマネージャは、RecyclerView内のアイテムビューを配置し、ユーザーが見えなくなったアイテムビューをいつ再利用するかを決定します。ビューを再利用(またはリサイクル)するために、レイアウトマネージャは、ビューの内容をデータセットとは異なる要素で置き換えるようにアダプタに依頼することがあります。このようにリサイクルビュー)は、(不必要なビューの作成を回避またはexpensivefindViewByIdを実行することにより、パフォーマンスを向上させ 例をルックアップの:

あなたのレイアウトに、このビューを追加します。

android.support.v7.widget.RecyclerView 
    android:id="@+id/my_recycler_view" 
    android:scrollbars="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

をあなたにRecyclerViewウィジェットを追加したらレイアウト、オブジェクトへのハンドルを取得し、レイアウトマネージャに接続し、表示するデータ用のアダプタを添付:

public class MyActivity extends Activity { 
    private RecyclerView mRecyclerView; 
    private RecyclerView.Adapter mAdapter; 
    private RecyclerView.LayoutManager mLayoutManager; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_activity); 
     mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
     // use this setting to improve performance if you know that changes 
     // in content do not change the layout size of the RecyclerView 
     mRecyclerView.setHasFixedSize(true); 
     // use a linear layout manager 
     mLayoutManager = new LinearLayoutManager(this); 
     mRecyclerView.setLayoutManager(mLayoutManager); 
     // specify an adapter (see also next example) 
     // Set your myDataSet with the url of your images. 
     mAdapter = new MyAdapter(myDataset); 
     mRecyclerView.setAdapter(mAdapter); 
    } 
    ... 
} 

はリサイクルビューを管理するためのアダプタを作成します。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 
    private MySQLClass mDataset; 

    // Provide a reference to the views for each data item 
    // Complex data items may need more than one view per item, and 
    // you provide access to all the views for a data item in a view holder 
    public static class ViewHolder extends RecyclerView.ViewHolder { 
     // each data item is just a string in this case 
     public ViewHolder(TextView v) { 
      super(v); 
      textView = v; 
     } 
    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(MySQLClass myDataset) { 
     mDataset = myDataset; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
                int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()) 
           .inflate(R.layout.my_image_view, parent, false); 
     // set the view's size, margins, paddings and layout parameters 
     ... 
     ViewHolder vh = new ViewHolder(v); 
     return vh; 
    } 

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     textView.setText(mDataset.get(i)); 

    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return mDataset.length; 
    } 
} 

情報から:

http://developer.android.com/training/material/lists-cards.html

0

あなたは、データベースからデータを取得して作業しているときは、その優れたクエリに応じて、すべての詳細をロードし、それを与えるだろうloaders.Aローダーを使用します(カーソルアダプタを使用している場合)、カーソルからリストへのデータを抽出し、そのリストを通常のアダプタに渡すことができます。

関連する問題