2017-08-26 126 views
0

我正在學習修改Android應用程序我在線購買的源代碼。在某些佈局中已經有AdMob廣告,但我想將它們添加到另一個佈局。我所做的是複製所需的代碼相關文件中的位。
這是修改後的fragment_category.xml文件不能正確放置admob廣告

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:id="@+id/main_layout" 
    tools:context=".CategoryFragment"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/container_body" > 


    </LinearLayout> 
    <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:background="#00ffffff" 
      android:gravity="center" 
      android:id="@+id/container_admob" 
      android:visibility="gone"> 

      <com.google.android.gms.ads.AdView 
       android:id="@+id/adView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerHorizontal="true" 
       android:layout_alignParentBottom="true" 
       ads:adSize="BANNER" 
       ads:adUnitId="@string/banner_ad_unit_id"> 
      </com.google.android.gms.ads.AdView> 



     <android.support.v4.widget.SwipeRefreshLayout 
      android:id="@+id/container_items" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:layout_width="match_parent" 
      android:background="@color/white"> 


      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler_view" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:clipToPadding="false" 
       android:scrollbars="vertical" /> 

     </android.support.v4.widget.SwipeRefreshLayout> 



    </LinearLayout> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Text" 
     android:id="@+id/message" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" /> 


</RelativeLayout> 

修改CategoryFragment.java在java文件findViewById file.only相關位(full CategoryFragment.java file

public class CategoryFragment extends Fragment implements Constants, SwipeRefreshLayout.OnRefreshListener { 

    private static final String STATE_LIST = "State Adapter Data"; 

    RecyclerView mRecyclerView; 
    TextView mMessage; 
    LinearLayout mContainerAdmob; 

    SwipeRefreshLayout mItemsContainer; 

    private ArrayList<Item> itemsList; 
    private FeedListAdapter itemsAdapter; 

    private int categoryId = 0; 

    private int itemId = 0; 
    private int arrayLength = 0; 
    private Boolean loadingMore = false; 
    private Boolean viewMore = false; 
    private Boolean restore = false; 

    private String title = ""; 

    int pastVisiblesItems = 0, visibleItemCount = 0, totalItemCount = 0; 

    public CategoryFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     mContainerAdmob = (LinearLayout) findViewById(R.id.container_admob); 

     if (App.getInstance().getAdmob() == ADMOB_ENABLED) { 

      mContainerAdmob.setVisibility(View.VISIBLE); 

      AdView mAdView = (AdView) findViewById(R.id.adView); 
      AdRequest adRequest = new AdRequest.Builder().build(); 
      mAdView.loadAd(adRequest); 
     } 

是紅[錯誤 - 無法解析方法findViewById(INT )] fragment_java.xml文件不是沒有顯示任何錯誤

工作文件

  1. activity_main.xml
  2. MainActivity.java

我說什麼,

在fragment_category.xml

xmlns:ads="http://schemas.android.com/apk/res-auto"

<LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="50dp" 
      android:background="#00ffffff" 
      android:gravity="center" 
      android:id="@+id/container_admob" 
      android:visibility="gone"> 

      <com.google.android.gms.ads.AdView 
       android:id="@+id/adView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerHorizontal="true" 
       android:layout_alignParentBottom="true" 
       ads:adSize="BANNER" 
       ads:adUnitId="@string/banner_ad_unit_id"> 
      </com.google.android.gms.ads.AdView> 

中CategoryFragment.java

import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.AdView; 

LinearLayout mContainerAdmob;

mContainerAdmob = (LinearLayout) findViewById(R.id.container_admob); 

     if (App.getInstance().getAdmob() == ADMOB_ENABLED) { 

      mContainerAdmob.setVisibility(View.VISIBLE); 

      AdView mAdView = (AdView) findViewById(R.id.adView); 
      AdRequest adRequest = new AdRequest.Builder().build(); 
      mAdView.loadAd(adRequest); 
     } 

如果這一切是太亂了,請給我建議的方式來幹這事嘗試教程,但他們每個人都有不同的代碼

+0

你不知道如何在片段中使用findViewById?這已被問及多次回答 –

+0

我真的不知道......我會搜索它,但如果其他佈局有效,那麼爲什麼不呢? –

+0

活動佈局?它的工作原理是在Activity中,其中findViewById是Activity類的一個方法。你不能用'extends Fragment'來替換'extends Activity'並讓事情有效。例如,'fragment_category'似乎並沒有真正用於你的問題 –

回答

0

只有相關位

你截掉了onCreateView。這就是,你必須使用rootView.findViewById獲得AD瀏覽和mContainerAdmob

0

您不能執行活動的一個片段的方法的方法。您必須使用片段的onCreateview()方法並擴大其佈局,然後可以調用findViewById();

的最佳方式實施

public View onCreateView(LayoutInflater inflater, 
ViewGroup container, Bundle savedInstanceState) { 
rootView = inflater.inflate(R.layout.fragment_category, 
container, false); 
AdView mAdView = 
(AdView)rootView.findViewById(R.id.adView); 
} 

以這種方式,所述rootView可用於在XML佈局定義的每個ID。

希望這會有所幫助。