Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 膨胀视图并将其添加到水平滚动视图中的线性布局-奇怪的行为_Android - Fatal编程技术网

Android 膨胀视图并将其添加到水平滚动视图中的线性布局-奇怪的行为

Android 膨胀视图并将其添加到水平滚动视图中的线性布局-奇怪的行为,android,Android,我正在尝试创建一个类,该类可以添加到布局文件中,设置适配器,然后从DataSetObserver进行更新 在NexusOne上,这通常看起来很好,但是在G1上,我有一些奇怪的行为 因此,活动的布局文件为: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vert

我正在尝试创建一个类,该类可以添加到布局文件中,设置适配器,然后从DataSetObserver进行更新

在NexusOne上,这通常看起来很好,但是在G1上,我有一些奇怪的行为

因此,活动的布局文件为:

<?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">

 <include android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:id="@+id/ActionBarInclude"
  layout="@layout/action_bar"></include>

  <LinearLayout android:layout_width="fill_parent"
   android:layout_height="fill_parent" android:orientation="vertical"
   android:background="@drawable/action_bar_drop_shadow">

   <TextView android:layout_height="wrap_content"
    android:layout_width="fill_parent" android:gravity="center"
    android:id="@+id/AccountSummaryAppTitleTextView" android:text=""
    style="@style/titleTextView"></TextView>

   <co.uk.gauntface.android.admob.views.TabBarScrollView
    android:id="@+id/AccountSummaryTabBarScrollView"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:scrollbars="none">

   </co.uk.gauntface.android.admob.views.TabBarScrollView>

   <co.uk.gauntface.android.admob.views.SlidingLayout android:layout_width="fill_parent"
    android:id="@+id/AccountSummarySlidingLayout" android:layout_weight="1"
    android:layout_height="wrap_content" android:scrollbars="none" android:fadingEdge="none"
    android:fillViewport="true">
            </co.uk.gauntface.android.admob.views.SlidingLayout>

  </LinearLayout>

</LinearLayout>
package co.uk.gauntface.android.admob;

import java.util.ArrayList;
import co.uk.gauntface.android.admob.models.RawSite;
import co.uk.gauntface.android.admob.models.SiteStat;
import co.uk.gauntface.android.admob.networking.AdmobDownloadListener;
import co.uk.gauntface.android.admob.networking.SiteStatService;
import co.uk.gauntface.android.admob.views.AccountSummaryAdapter;
import co.uk.gauntface.android.admob.views.SlidingLayout;
import co.uk.gauntface.android.admob.views.TabBarScrollView;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class AccountSummary extends AdmobActivity
{ 
 private final static String TAG = "admob";

 public static final String ACCOUNT_SUMMARY_INTENT_EXTRA_ID = "AccountSummaryIntentExtraID";

 private String mAccountID;
 private RawSite mRawSiteData;

 private Handler mHandler;
 private SiteStatService mSiteStatService;
 private ArrayList<SiteStat> mSiteStatData;

 private ActionBarHelper mActionBarHelper;

 private TextView mAppTitleTextView;
 private TabBarScrollView mTabBarScrollView;
 private SlidingLayout mSlidingLayout;
 private AccountSummaryAdapter mAdapter;

 /** Called when the activity is first created. */
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.account_summary);

  mAccountID = getIntent().getExtras().getString(ACCOUNT_SUMMARY_INTENT_EXTRA_ID);
  mSiteStatService = new SiteStatService(getApplicationContext());
  //mChartAdapter = new PointPositionAdapter(getApplicationContext());

  initActivity();

  setUpUI();

  if(getLastNonConfigurationInstance() != null) {
   mSiteStatData = (ArrayList<SiteStat>) getLastNonConfigurationInstance();
   mAdapter.setSiteStatData(mSiteStatData);
  } else {
   updateSiteStatData();
  }
 }

 /**public void onConfigurationChanged (Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.account_summary);

  setUpUI();
 }**/

 @Override
 public Object onRetainNonConfigurationInstance() {
  return mSiteStatData;
 }

 private void initActivity() {
  mHandler = new Handler() {
   public void handleMessage(Message msg) {
    switch(msg.arg1) {
    default:
     break;
    }
   }
  };

  mAdapter = new AccountSummaryAdapter(getApplicationContext(), new Integer[]{
   R.string.revenue,
   R.string.ecpm,
   R.string.requests,
   R.string.impressions,
   R.string.fill_rate,
   R.string.ctr
  });

  DatabaseManager dbManager = new DatabaseManager(getApplicationContext());
  dbManager.open();
  mRawSiteData = dbManager.getSite(mAccountID);
  dbManager.close();

 }

 private void setUpUI() {
  mActionBarHelper = new ActionBarHelper(this);

  mAppTitleTextView = (TextView) findViewById(R.id.AccountSummaryAppTitleTextView);
  mAppTitleTextView.setText(mRawSiteData.getSiteName());

  mTabBarScrollView = (TabBarScrollView) findViewById(R.id.AccountSummaryTabBarScrollView);
  mTabBarScrollView.setAdapter(mAdapter.getTabBarAdapter());
  mTabBarScrollView.setOnItemOnClickListener(mAdapter);

  mSlidingLayout = (SlidingLayout) findViewById(R.id.AccountSummarySlidingLayout);
  mSlidingLayout.setAdapter(mAdapter.getSlidingLayoutAdapter());
  mSlidingLayout.setOnDisplayChangeListener(mAdapter);
 }

 private void updateSiteStatData() {
  mActionBarHelper.incrementRequests();
  int daysToGet = getResources().getInteger(R.integer.account_summary_days);
  mSiteStatService.downloadDailySiteStats(daysToGet, mRawSiteData.getSiteID(), new AdmobDownloadListener() {

   public void onDownloadSuccess(Object obj) {
    mActionBarHelper.decrementRequests();
    mSiteStatData = (ArrayList<SiteStat>) obj;

    //mAdapter.setSiteStatData(mSiteStatData);
   }

   public void onDownloadError(int errorCode, String errorMsg) {
    mActionBarHelper.decrementRequests();
    displayErrorMessage(errorCode, errorMsg);
   }
  });
 }

 public void onClick(View v) {
  switch(v.getId())
  {
  case R.id.ActionBarRefreshImageButton:
   updateSiteStatData();
   break;
  }
 }
}

我之所以将FillViewPort设置为true,是因为这里有一个类似的问题: 虽然这并没有解决我的问题

该活动的源代码为:

<?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">

 <include android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:id="@+id/ActionBarInclude"
  layout="@layout/action_bar"></include>

  <LinearLayout android:layout_width="fill_parent"
   android:layout_height="fill_parent" android:orientation="vertical"
   android:background="@drawable/action_bar_drop_shadow">

   <TextView android:layout_height="wrap_content"
    android:layout_width="fill_parent" android:gravity="center"
    android:id="@+id/AccountSummaryAppTitleTextView" android:text=""
    style="@style/titleTextView"></TextView>

   <co.uk.gauntface.android.admob.views.TabBarScrollView
    android:id="@+id/AccountSummaryTabBarScrollView"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:scrollbars="none">

   </co.uk.gauntface.android.admob.views.TabBarScrollView>

   <co.uk.gauntface.android.admob.views.SlidingLayout android:layout_width="fill_parent"
    android:id="@+id/AccountSummarySlidingLayout" android:layout_weight="1"
    android:layout_height="wrap_content" android:scrollbars="none" android:fadingEdge="none"
    android:fillViewport="true">
            </co.uk.gauntface.android.admob.views.SlidingLayout>

  </LinearLayout>

</LinearLayout>
package co.uk.gauntface.android.admob;

import java.util.ArrayList;
import co.uk.gauntface.android.admob.models.RawSite;
import co.uk.gauntface.android.admob.models.SiteStat;
import co.uk.gauntface.android.admob.networking.AdmobDownloadListener;
import co.uk.gauntface.android.admob.networking.SiteStatService;
import co.uk.gauntface.android.admob.views.AccountSummaryAdapter;
import co.uk.gauntface.android.admob.views.SlidingLayout;
import co.uk.gauntface.android.admob.views.TabBarScrollView;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class AccountSummary extends AdmobActivity
{ 
 private final static String TAG = "admob";

 public static final String ACCOUNT_SUMMARY_INTENT_EXTRA_ID = "AccountSummaryIntentExtraID";

 private String mAccountID;
 private RawSite mRawSiteData;

 private Handler mHandler;
 private SiteStatService mSiteStatService;
 private ArrayList<SiteStat> mSiteStatData;

 private ActionBarHelper mActionBarHelper;

 private TextView mAppTitleTextView;
 private TabBarScrollView mTabBarScrollView;
 private SlidingLayout mSlidingLayout;
 private AccountSummaryAdapter mAdapter;

 /** Called when the activity is first created. */
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.account_summary);

  mAccountID = getIntent().getExtras().getString(ACCOUNT_SUMMARY_INTENT_EXTRA_ID);
  mSiteStatService = new SiteStatService(getApplicationContext());
  //mChartAdapter = new PointPositionAdapter(getApplicationContext());

  initActivity();

  setUpUI();

  if(getLastNonConfigurationInstance() != null) {
   mSiteStatData = (ArrayList<SiteStat>) getLastNonConfigurationInstance();
   mAdapter.setSiteStatData(mSiteStatData);
  } else {
   updateSiteStatData();
  }
 }

 /**public void onConfigurationChanged (Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.account_summary);

  setUpUI();
 }**/

 @Override
 public Object onRetainNonConfigurationInstance() {
  return mSiteStatData;
 }

 private void initActivity() {
  mHandler = new Handler() {
   public void handleMessage(Message msg) {
    switch(msg.arg1) {
    default:
     break;
    }
   }
  };

  mAdapter = new AccountSummaryAdapter(getApplicationContext(), new Integer[]{
   R.string.revenue,
   R.string.ecpm,
   R.string.requests,
   R.string.impressions,
   R.string.fill_rate,
   R.string.ctr
  });

  DatabaseManager dbManager = new DatabaseManager(getApplicationContext());
  dbManager.open();
  mRawSiteData = dbManager.getSite(mAccountID);
  dbManager.close();

 }

 private void setUpUI() {
  mActionBarHelper = new ActionBarHelper(this);

  mAppTitleTextView = (TextView) findViewById(R.id.AccountSummaryAppTitleTextView);
  mAppTitleTextView.setText(mRawSiteData.getSiteName());

  mTabBarScrollView = (TabBarScrollView) findViewById(R.id.AccountSummaryTabBarScrollView);
  mTabBarScrollView.setAdapter(mAdapter.getTabBarAdapter());
  mTabBarScrollView.setOnItemOnClickListener(mAdapter);

  mSlidingLayout = (SlidingLayout) findViewById(R.id.AccountSummarySlidingLayout);
  mSlidingLayout.setAdapter(mAdapter.getSlidingLayoutAdapter());
  mSlidingLayout.setOnDisplayChangeListener(mAdapter);
 }

 private void updateSiteStatData() {
  mActionBarHelper.incrementRequests();
  int daysToGet = getResources().getInteger(R.integer.account_summary_days);
  mSiteStatService.downloadDailySiteStats(daysToGet, mRawSiteData.getSiteID(), new AdmobDownloadListener() {

   public void onDownloadSuccess(Object obj) {
    mActionBarHelper.decrementRequests();
    mSiteStatData = (ArrayList<SiteStat>) obj;

    //mAdapter.setSiteStatData(mSiteStatData);
   }

   public void onDownloadError(int errorCode, String errorMsg) {
    mActionBarHelper.decrementRequests();
    displayErrorMessage(errorCode, errorMsg);
   }
  });
 }

 public void onClick(View v) {
  switch(v.getId())
  {
  case R.id.ActionBarRefreshImageButton:
   updateSiteStatData();
   break;
  }
 }
}
package co.uk.gaunface.android.admob;
导入java.util.ArrayList;
import co.uk.gaunface.android.admob.models.RawSite;
import co.uk.gaunface.android.admob.models.SiteStat;
导入co.uk.gaunface.android.admob.networking.AdmobDownloadListener;
import co.uk.gaunface.android.admob.networking.SiteStatService;
导入co.uk.gaunface.android.admob.views.AccountSummaryAdapter;
导入co.uk.gaunface.android.admob.views.SlidingLayout;
import co.uk.gaunface.android.admob.views.TabBarScrollView;
导入android.os.Bundle;
导入android.os.Handler;
导入android.os.Message;
导入android.util.Log;
导入android.view.view;
导入android.widget.TextView;
公共类AccountSummary扩展了AdMobility
{ 
私有最终静态字符串TAG=“admob”;
公共静态最终字符串帐户\u摘要\u意图\u额外\u ID=“accountsummaryintententextraid”;
私有字符串mAccountID;
私有RawSite mRawSiteData;
私人经理人;
专用站点StatService MSITestService;
私有ArrayList msitestdata;
私人ActionBarHelper mActionBarHelper;
私有文本视图mAppTitleTextView;
私有选项卡滚动视图mTabBarScrollView;
私人幻灯片布局mSlidingLayout;
私人帐户摘要适配器;
/**在首次创建活动时调用*/
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.account_summary);
mAccountID=getIntent().getExtras().getString(账户\汇总\意图\额外\ ID);
msitestservice=newsitestatservice(getApplicationContext());
//mChartAdapter=newpointpositionadapter(getApplicationContext());
初始化活动();
setUpUI();
如果(getLastNonConfigurationInstance()!=null){
MSITestData=(ArrayList)getLastNonConfigurationInstance();
mAdapter.setsitestata(msitestdata);
}否则{
updateTestData();
}
}
/**公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
setContentView(R.layout.account_summary);
setUpUI();
}**/
@凌驾
公共对象OnRetainOnConfiguration实例(){
返回MSITestData;
}
私有void initActivity(){
mHandler=新处理程序(){
公共无效handleMessage(消息消息消息){
开关(消息arg1){
违约:
打破
}
}
};
mAdapter=new AccountSummaryAdapter(getApplicationContext(),新整数[]{
R.string.revenue,
R.string.ecpm,
R.string.requests,
R.string.impressions,
R.字符串填充率,
R.string.ctr
});
DatabaseManager dbManager=newdatabasemanager(getApplicationContext());
dbManager.open();
mRawSiteData=dbManager.getSite(mAccountID);
dbManager.close();
}
私有void setUpUI(){
mActionBarHelper=新的ActionBarHelper(此);
mAppTitleTextView=(TextView)findViewById(R.id.AccountSummaryAppTitleTextView);
mappitletextview.setText(mRawSiteData.getSiteName());
mTabBarScrollView=(TabBarScrollView)findViewById(R.id.AccountSummaryTabBarScrollView);
mTabBarScrollView.setAdapter(mAdapter.getTabBarAdapter());
mTabBarScrollView.setOnItemOnClickListener(mAdapter);
mSlidingLayout=(SlidingLayout)findViewById(R.id.AccountSummary SlidingLayout);
mSlidingLayout.setAdapter(mAdapter.getSlidingLayoutAdapter());
mSlidingLayout.setOnDisplayChangeListener(mAdapter);
}
私有void updateTestData(){
mActionBarHelper.incrementRequests();
int daysToGet=getResources().getInteger(R.integer.account\u summary\u days);
MSITestService.DownloadDailySetTests(daysToGet,mRawSiteData.getSiteID(),new AdmobDownloadListener()){
公共无效onDownloadSuccess(对象obj){
mActionBarHelper.decrementRequests();
msitestdata=(ArrayList)obj;
//mAdapter.setsitestata(msitestdata);
}
public void onDownloadError(int errorCode,String errorMsg){
mActionBarHelper.decrementRequests();
显示ErrorMessage(errorCode,errorMsg);
}
});
}
公共void onClick(视图v){
开关(v.getId())
{
案例R.id.ActionBarreshImageButton:
updateTestData();
打破
}
}
}
这将很好地显示视图,但是滑动布局实际上将显示为空白(即,它不会膨胀线性布局中包含的视图)

SlidingLayout的源代码是:

package co.uk.gauntface.android.admob.views;

import co.uk.gauntface.android.admob.R;
import android.content.Context;
import android.database.DataSetObserver;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.Adapter;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;

public class SlidingLayout extends HorizontalScrollView {

 private static final String TAG = "admob";

 private int mSelectedPosition;
 private int mNewSelectedPosition;
 private LinearLayout mContainerLinearLayout;

 private int mScaledTouchSlop;

 private float mPrevX;

 private int mItemCount;
 private boolean mIsTouchEventScroll;

 private SlidingLayoutAdapter mAdapter;
 private DataSetObserver mDataSetObserver;
 private OnDisplayChangeListener mDisplayChangeListener;

 public SlidingLayout(Context context) {
  super(context);

  constructor();
 }

 public SlidingLayout(Context context, AttributeSet attrs) {
  super(context, attrs);

  constructor();
 }

 public SlidingLayout(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);

  constructor();
 }

 private void constructor() {
  Log.v(TAG, "SlidingLayout: constructor()");
  mSelectedPosition = 0;
  mNewSelectedPosition = 0;

  mItemCount = 0;

  mScaledTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  Log.v(TAG, "SlidingLayout: onTouchEvent()");
  int action = event.getAction();

  switch (action) {
  case MotionEvent.ACTION_DOWN:
   break;
  case MotionEvent.ACTION_MOVE:
   int deltaX = (int) (mPrevX - event.getX());
   scrollBy(deltaX, 0);
   break;
  case MotionEvent.ACTION_UP:
   animateToPosition();
  }

  mPrevX = event.getX();

  return true;
 }

 private void animateToPosition() {
  Log.v(TAG, "SlidingLayout: animateToPosition()");
  double scrollX = getScrollX();
  int screenWidth = getWidth();

  double ratio = scrollX / (double) screenWidth;
  int whichScreen = (int) Math.round(ratio);

  if(whichScreen >= 0 && whichScreen < mItemCount) {
   int newX = whichScreen * screenWidth;
   //int screenDiff = whichScreen - mDisplayedView;
   int screenDiff = whichScreen - mSelectedPosition;
   switch(screenDiff) {
   case -1:
    mNewSelectedPosition = mSelectedPosition - 1;
    break;
   case 0:
    mNewSelectedPosition = mSelectedPosition;
    break;
   case 1:
    mNewSelectedPosition = mSelectedPosition + 1;
    break;
   }

   if(mNewSelectedPosition < 0) {
    mNewSelectedPosition = 0;
   } else if(mNewSelectedPosition >= mItemCount) {
    mNewSelectedPosition = mItemCount - 1;
   }

   mIsTouchEventScroll = true;
   smoothScrollTo(newX, 0);
  }
 }

 public void setOnDisplayChangeListener(OnDisplayChangeListener changeListener) {
  mDisplayChangeListener = changeListener;
 }

 public void setAdapter(SlidingLayoutAdapter adapter) {
  Log.v(TAG, "SlidingLayout: setAdapter()");
  if(mContainerLinearLayout == null) {
   mContainerLinearLayout = new LinearLayout(getContext());
   mContainerLinearLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
   mContainerLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
   mContainerLinearLayout.setBackgroundColor(getContext().getResources().getColor(R.color.admob_color));

   addView(mContainerLinearLayout);
  }

  if(mAdapter != null) {
   mAdapter.unregisterDataSetObserver(mDataSetObserver);
  }

  mAdapter = adapter;

  if(mAdapter != null) {
   mDataSetObserver = new SlidingLayoutDataSetObserver();
   mAdapter.registerDataSetObserver(mDataSetObserver);

   mItemCount = mAdapter.getCount();
   mSelectedPosition = mAdapter.getSelectedPosition();
  } else {
   mItemCount = 0;
   mSelectedPosition = 0;

   return;
  }

  populateLayout();
 }

 // l is horizontal scroll origin, t is vertical
 /**protected void onScrollChanged (int l, int t, int oldl, int oldt) {
  super.onScrollChanged(l, t, oldl, oldt);
  if(mIsTouchEventScroll) {
   if(l % getWidth() == 0) {
    mIsTouchEventScroll = false;
    mSelectedPosition = mNewSelectedPosition;
    if(mDisplayChangeListener != null) {
     mDisplayChangeListener.onDisplayChange(l/getWidth());
    }
   }
  }
 }**/

 private void populateLayout() {
  Log.v(TAG, "SlidingLayout: populateLayout() - itemCount = "+mItemCount);
  if(mContainerLinearLayout != null) {
   mContainerLinearLayout.removeAllViews();
  }

  for(int i = 0; i < mItemCount; i++) {
   View v = mAdapter.getView(i, null, null);
   v.setMinimumWidth(getWidth());
   mContainerLinearLayout.addView(v);
  }

  invalidate();

  scrollTo(mSelectedPosition * getWidth(), 0);

  //View childView = mContainerLinearLayout.getChildAt(mSelectedPosition);
  //mContainerLinearLayout.invalidate();
  //childView.invalidate();
  Log.v(TAG, "SlidingLayout: populateLayout() scrollX - "+getScrollX());
  //Log.v(TAG, "SlidingLayout: populateLayout() childView.width() - "+childView.getWidth());
  Log.v(TAG, "SlidingLayout: populateLayout() getWidth() - "+getWidth());
  Log.v(TAG, "SlidingLayout: populateLayout() getHeight() - "+getHeight());
  //Log.v(TAG, "SlidingLayout: populateLayout() container.getWidth() - "+mContainerLinearLayout.getWidth());
  //Log.v(TAG, "SlidingLayout: populateLayout() container.getHeight() - "+mContainerLinearLayout.getHeight());
 }

 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  super.onSizeChanged(w, h, oldw, oldh);
  if(mAdapter != null) {
   mItemCount = mAdapter.getCount();
   mSelectedPosition = mAdapter.getSelectedPosition();
  }
  populateLayout();
 }

 public interface OnDisplayChangeListener {
  abstract void onDisplayChange(int position);
 }

 public interface SlidingLayoutAdapter extends Adapter {
  abstract int getSelectedPosition();
 }

 public class SlidingLayoutDataSetObserver extends DataSetObserver {
  public SlidingLayoutDataSetObserver() {
   super();
  }

  @Override
  public void onChanged() {
   Log.v(TAG, "SlidingLayout: onChanged()");
   mItemCount = mAdapter.getCount();
   mSelectedPosition = mAdapter.getSelectedPosition();
   populateLayout();
  }

  @Override
  public void onInvalidated() {
   // Data is invalid so we should reset our state
   //mItemCount = 0;
   //mSelectedPosition = 0;//mAdapter.getSelectedPosition();
   //Log.v(TAG, "SlidingLayout: onInvalidated() removeAllViews");
   //mContainerLinearLayout.removeAllViews();
   //invalidate();
   //populateLayout();
   //requestLayout();
   Log.v(TAG, "SlidingLayout: onInvalidated()");

   mItemCount = mAdapter.getCount();
   mSelectedPosition = mAdapter.getSelectedPosition();
   populateLayout();
  }
 }
}
package co.uk.gaunface.android.admob.views;
import co.uk.gaunface.android.admob.R;
导入android.content.Context;
导入android.database.DataSetObserver;
导入android.util.AttributeSet;
导入android.util.Log;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.ViewConfiguration;
导入android.widget.Adapter;
导入android.widget.HorizontalScrollView;
导入android.widget.LinearLayout;
公共类滑动布局扩展水平滚动视图{
私有静态最终字符串TAG=“admob”;
私人int mSelectedPosition;
私人int MNEWSELECTED职位;
私人线路布局mContainerLinearLayout;
私人内部MSCaledtouchlop;
私人浮动mPrevX;
私有内部mItemCount;
私有布尔mIsTouchEventScroll;
私人滑动布局调整器;
私有DataSetObserver mDataSetObserver;
私有OnDisplayChangeListener mDisplayChangeListener;
公共幻灯片布局(上下文){
超级(上下文);
构造函数();
}
公共幻灯片布局(上下文、属性集属性){
超级(上下文,attrs);
构造函数();
}
公共幻灯片布局(上下文,属性