English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

مثال على تحقيق تأثير التصفح في Market باستخدام ListView في Android

هذا المقال يشرح كيفية تحقيق تأثير تحميل الصفحات مثل Market في Android باستخدام ListView. أشارككم هذا المقال لأخذ النصائح، وفقًا لما يلي:

في الآونة الأخيرة، كنت أدرس كيفية تحقيق تحميل الصفحات والتدفق الديناميكي لـ ListView، ووجدت أن يمكن استخدام دالة OnScroll الخاصة بلـ listView لتحقيق ذلك، سأقوم بإعداد الشيفرة مباشرة.

ListViewScroll.java

package zy.lucifer.ListViewScroll;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout.LayoutParams;
public class ListViewScroll extends Activity {
  /** تم استدعاء هذا الدالة عندما يتم إنشاء النشاط لأول مرة. */
  private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT,
      LinearLayout.LayoutParams.WRAP_CONTENT);
  /**
   *设置布局显示目标最大化属性
   */
  private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.FILL_PARENT,
      LinearLayout.LayoutParams.FILL_PARENT);
  ListView listView ;
  private int lastItem = 0;
  LinearLayout loadingLayout;
  private listViewAdapter adapter;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    listView = (ListView) findViewById(R.id.myList);
    Log.i("test", "onCreate(Bundle savedInstanceState)>>>>>>>>>>>>>>>");
    //线性布局
    LinearLayout layout = new LinearLayout(this);
    //设置布局水平方向
    layout.setOrientation(LinearLayout.HORIZONTAL);
    //进度条
    ProgressBar progressBar = new ProgressBar(this);
    //进度条显示位置
    progressBar.setPadding(0, 0, 15, 0);
    //把进度条加入到layout中
    layout.addView(progressBar, mLayoutParams);
    //文本内容
    TextView textView = new TextView(this);
    textView.setText("加载中...");
    textView.setGravity(Gravity.CENTER_VERTICAL);
    //把文本加入到layout中
    layout.addView(textView, FFlayoutParams);
    // إعداد اتجاه gravity للlayout، أي طريقة التوجيه هي
    layout.setGravity(Gravity.CENTER);
    // إعداد layout للصفحة السفلية ListView
    loadingLayout = new LinearLayout(this);
    loadingLayout.addView(layout, mLayoutParams);
    loadingLayout.setGravity(Gravity.CENTER);
    listView.addFooterView(loadingLayout);
    adapter = new listViewAdapter();
    listView.setAdapter(adapter);
    listView.setOnScrollListener(new OnScrollListener() {
      @Override
      public void onScroll(AbsListView view, int firstVisibleItem,
          int visibleItemCount, int totalItemCount) {
        // TODO Auto-generated method stub
        Log.i("test" , "Scroll>>>first: " + firstVisibleItem + ", visible: " + visibleItemCount + ", total: " + totalItemCount);
        lastItem = firstVisibleItem + visibleItemCount - 1;
        Log.i("test" , "Scroll>>>lastItem:" + lastItem);
        // عرض 50 خطListItem، أي 0-49، لأن onScroll يتم تنفيذه بعد "التمدد"، لذا يتم استخدام adapter.count<=41 كشرط
        int scrolllength=101;
        إذا (adapter.count<=scrolllength) {
          إذا (firstVisibleItem+visibleItemCount==totalItemCount) {
            adapter.count += 10;
            adapter.notifyDataSetChanged();
            listView.setSelection(lastItem);
            int currentPage=adapter.count/10;
            Toast.makeText(getApplicationContext(), "الصف"+currentPage+"الصفحة", Toast.LENGTH_LONG).show();
          }
        }
        else {
           listView.removeFooterView(loadingLayout);
        }
      }
      @Override
      public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub
      }
    });
  }
  class listViewAdapter extends BaseAdapter {
    int count = 10; /* starting amount */
    public int getCount() {
      return count;
    }
    public Object getItem(int pos) {
      return pos;
    }
    public long getItemId(int pos) {
      return pos;
    }
    public View getView(int pos, View v, ViewGroup p) {
      Log.i("test", "getView>>>pos:" + pos);
      TextView view;
      if (v == null) {
        view = new TextView(ListViewScroll.this);
      } else {
        view = (TextView) v;
      }
      view.setText("ListItem " + pos);
      view.setTextSize(20f);
      view.setGravity(Gravity.CENTER);
      view.setHeight(60);
      return view;
    }
  }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
<ListView android:cacheColorHint="#00000000" android:id="@+id/myList"
android:layout_width="fill_parent" android:layout_height="fill_parent"
    >
  </ListView>
</LinearLayout>

بالنسبة للقراء المهتمين بمزيد من المعلومات حول أندرويد، يمكنهم مراجعة مواضيع هذا الموقع المخصصة: 'تجميع تقنيات عرض Android'، 'تجميع تقنيات التخطيط Android'، 'تجميع تقنيات معالجة الصور والرسومات Android'، 'تعليمات الدخول والترقية في تطوير Android'، 'تجميع تقنيات الت调试 والتخلص من المشاكل الشائعة في Android'، 'تجميع تقنيات التعامل مع الوسائط المتعددة في Android (الصوت، الفيديو، التسجيل، إلخ)'، 'تجميع استخدامات العناصر الأساسية في Android'، و 'تجميع استخدامات التحكمات في Android'.

آمل أن يساعدك هذا المقال في تصميم برامج أندرويد.

بيان: محتوى هذا المقال تم جمعه من الإنترنت، ويتمتع المالك الأصلي بحقوق الملكية، ويتم جمع المحتوى من قبل المستخدمين عبر الإنترنت الذين يقدمون المساهمات بشكل تلقائي، ويتمتع هذا الموقع بعدم امتلاك حقوق الملكية، ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال '#' ب '@') لإبلاغنا، وقدم الدليل على الدليل، وسيتم حذف المحتوى المزعوم فور التحقق منه.

أنت قد تحب