java - 将 adView 嵌入 ListView fragment 中的 android 逻辑错误 - 最新的 admob sdk - 使用 XML 和 Java 进行了修订

标签 java android listview android-listview admob

我终于让我的广告在我的 ListView fragment 中运行,但现在我遇到了一个奇怪的逻辑错误。问题似乎与跟踪广告的位置(位置 0)和列表中的其余项目有关。第一个项目被添加替换,点击列表中的任何项目进行更新,然后返回到项目列表。列表名称似乎乱序。

以下是我使用 adMob XML 代码和我的 ListFragment 类中的几行 java 所做的修订,

我的XML代码如下:

  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      >
    <LinearLayout 
      android:id="@+id/adsContainer"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"/>
    <com.google.android.gms.ads.AdView
      xmlns:ads="http://schemas.android.com/apk/res-auto"
      android:id="@+id/adView"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      ads:adUnitId="ca-app-pub-9999999999999999999999999"
      ads:adSize="BANNER"/>
    <ListView
      android:id="@android:id/list"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      >
     </ListView>
     <ListView
       android:id="@android:id/empty"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:paddingLeft="4dp"
       android:paddingRight="4dp"
       android:text="@string/new_empty_desc" 
      >
      </ListView>
</

在我的类(class)公共(public)类 BxListFragment extends SherlockListFragment :

<p>import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdRequest.Builder; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.doubleclick.PublisherAdRequest; import com.google.android.gms.ads.doubleclick.PublisherAdView; import com.google.android.gms.drive.query.internal.InFilter; import com.robertrichardson.bxxxyxxxxzxxxLite.R.string;</p> <p>/* * BxiedListFragment Class: Sets up and displays all Bxied Activity on the list. */</p> <p>public class BxiedListFragment extends SherlockListFragment {</p> <pre><code> private ArrayList<Bxied> mBxied; private boolean mSubtitleVisible; private LayoutInflater inflater; private PostData[] datas; private Activity mainActivity; private static final String AD_UNIT_ID = "ca-app-pub-4409647944042499/8301167762"; public static final String TAG = "BxiedListFragment"; private AdView adView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); getSherlockActivity().setTitle(R.string.app_name); mBxied = BxiedLab.get(getSherlockActivity()).getBxied(); BxiedAdapter adapter = new BxiedAdapter(mBxied); setListAdapter(adapter); setRetainInstance(true); mSubtitleVisible = false; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setEmptyText(getResources().getString(string.new_bxied_attack_empty_desc)); registerForContextMenu(getListView()); setHasOptionsMenu(true); } @TargetApi(11) @Override public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { View v = super.onCreateView(inflater, parent, savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { if (mSubtitleVisible) { getSherlockActivity().getSupportActionBar().setSubtitle(R.string.subtitle); } } ListView listView = (ListView)v.findViewById(android.R.id.list); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { // Use floating point context menus on Froyer and Gingerbread registerForContextMenu(listView); } else { // Use contextual action bar on Honeycomb and higher listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE); listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { public boolean onActionItemClicked( android.view.ActionMode arg0, android.view.MenuItem arg1) { // TODO Auto-generated method stub return false; } public boolean onCreateActionMode(android.view.ActionMode mode, android.view.Menu menu) { // TODO Auto-generated method stub return false; } public void onDestroyActionMode(android.view.ActionMode mode) { // TODO Auto-generated method stub } public boolean onPrepareActionMode( android.view.ActionMode mode, android.view.Menu menu) { // TODO Auto-generated method stub return false; } public void onItemCheckedStateChanged( android.view.ActionMode mode, int position, long id, boolean checked) { // TODO Auto-generated method stub } // ActionMode.Callback methods }); } return v; </code></pre> <p>}</p> <pre><code> @Override public void onListItemClick(ListView l, View v, int position, long id) { Bxied c = ((BxiedAdapter)getListAdapter()).getItem(position); // Start Bxied Activity Intent i = new Intent(getSherlockActivity(), BxiedPagerActivity.class); i.putExtra(BxiedFragment.EXTRA_BULLIED_ID, c.getId()); startActivityForResult(i, 0); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { ((BxiedAdapter)getListAdapter()).notifyDataSetChanged(); } @Override public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.fragment_bxied_list, menu); } </code></pre> <p>@TargetApi(11) @Override public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { switch (item.getItemId()) { case R.id.settings: Intent i=new Intent(getSherlockActivity(), Preferences.class); startActivity(i); return(true); case R.id.about: i=new Intent(getSherlockActivity(),BxiedContentActivity.class); i.putExtra(BxiedContentActivity.EXTRA_FILE, "file:///android_asset/misc/about.html"); startActivity(i); return(true); case R.id.help: i=new Intent(getSherlockActivity(),BxiedContentActivity.class); i.putExtra(BxiedContentActivity.EXTRA_FILE, "file:///android_asset/misc/help.html"); startActivity(i); return(true); case R.id.disclaimer: i=new Intent(getSherlockActivity(),BxiedContentActivity.class); i.putExtra(BxiedContentActivity.EXTRA_FILE, "file:///android_asset/misc/disclaimer.html"); startActivity(i); return(true); case R.id.menu_item_new_bxied: Bxied bxied = new Bxied(); BxiedLab.get(getSherlockActivity()).addBxied(bxied); i = new Intent(getSherlockActivity(), BxiedPagerActivity.class); i.putExtra(BxiedFragment.EXTRA_BULLIED_ID, bxied.getId()); startActivityForResult(i,0); return true; default: return super.onOptionsItemSelected(item); } }</p> <pre><code> @Override public void onCreateContextMenu(ContextMenu menu,View v, ContextMenuInfo menuInfo) { getActivity().getMenuInflater().inflate(R.menu.bxied_list_item_context, menu); } @Override public boolean onContextItemSelected(android.view.MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo(); int position = info.position; BxiedAdapter adapter = (BxiedAdapter)getListAdapter(); Bxied bxied = adapter.getItem(position); switch (item.getItemId()) { case R.id.menu_item_delete_bxied: BxiedLab.get(getActivity()).deleteBxied(bxied); adapter.notifyDataSetChanged(); return true; } return super.onContextItemSelected(item); } private class BxiedAdapter extends ArrayAdapter<Bxied> { public BxiedAdapter(ArrayList<Bxied> bxied) { super(getSherlockActivity(), android.R.layout.simple_list_item_1, bxied); } @Override public View getView(int position, View convertView, ViewGroup parent) { Log.i("1", "msg1"); // If we weren't given a view, inflate one if (convertView == null) { convertView = getSherlockActivity().getLayoutInflater() .inflate(R.layout.list_item_bxied, null); } // Enter the view of this Bxied Attack Bxied c = getItem(position); TextView titleTextView = (TextView)convertView.findViewById(R.id.bxied_list_item_titleTextView); titleTextView.setText(c.getTitle()); TextView dateTextView = (TextView)convertView.findViewById(R.id.bxied_list_item_dateTextView); dateTextView.setText(DateFormat.format("EEEE, MMM dd, yyyy hh : mm a", c.getDate()).toString()); CheckBox resolvedCheckBox = (CheckBox)convertView.findViewById(R.id.bxied_list_item_resolvedCheckBox); resolvedCheckBox.setChecked(c.isResolved()); return convertView; } </code></pre> <p>}</p> <pre><code> @Override public void onResume() { super.onResume(); ((BxiedAdapter)getListAdapter()).notifyDataSetChanged(); } } </code></pre>

我正在尝试在上面的 ListFragment 中添加这段代码。目前我收到语法错误 findVuewById(int) undefined。我的问题是在我的 listfragment 中哪里可以最好地插入这段代码以将广告放置在上面的 XML 中?

<pre><code> /* * New ads Logic */ AdView adView = (AdView)this.findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .addTestDevice("TEST_DEVICE_ID") .build(); adView.loadAd(adRequest); </code></pre>

最佳答案

问题可能与使 0 成为特例有关,但数据源也有零元素。列表和适配器不再对齐。

将广告 View 放在页眉中可能会奏效。看这里: https://developer.android.com/reference/android/widget/ListView.html#addHeaderView%28android.view.View,%20java.lang.Object,%20boolean%29

关于java - 将 adView 嵌入 ListView fragment 中的 android 逻辑错误 - 最新的 admob sdk - 使用 XML 和 Java 进行了修订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22522875/

相关文章:

android - 如何使用 android.view.ViewDebug 静态方法?

java - 将自定义形状应用于 Android ListView

Android - 自动回收 ListView 元素?

android - 无法阻止 Eclipse 提示我已经修复的错误

java - 使用 Hibernate 创建/重新创建表后立即自动插入第一行

java - 如何为数据和索引指定单独的表空间?

java - Java中Runnable和Callable接口(interface)的区别

android - Unity3D 错误 "Failed to initialize Unity graphics"

javascript - 如何在 JQuery Mobile 的 ListView 中拥有自定义按钮?

java - 使用 OData 时如何加速 Android 的 ReSTLet?