2015-06-11 83 views
1

我有一個tabpager和碎片。一個Frament已經有了一個「GridView」。我在片段父代活動中使用基於內部類的我如何在家長活動中訪問片段佈局?

但是,當我想設置適配器到我gridview我變得nullpointerexception。因爲GridView變量總是null.how可以解決這個問題嗎?

Fragment Parent MainActivity OnCreate Method;

GridView gv = (GridView)findViewById(R.id.gridview); // debugging and always null 
gv.setAdapter(new AdapterB(this,WallPaperList)); 

片段XML

<!-- TODO: Update blank fragment layout --> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:columnWidth="90dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
    /> 

MyGrid.xml(對於適配器填入)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <ImageView 
     android:id="@+id/imagepart" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Seç" 
     android:id="@+id/checkBox" /> 
</LinearLayout> 

回答

0

你不能ACCES這樣的片段意見,becouse他們可以 尚未處於活動視圖層次結構中。

你有一些方法添加到您的片段,像

myCustomFragment.setGridAdapter(MyCustomGridViewAdapter adapter) 

,並在此方法中自定義片段:

public void setGridAdapter(){ 
    this.myCustomGridAdapter = adapter; 
    GridView gv = (GridView)findViewById(R.id.gridview); 

    if(gv != null) 
     gv.setAdapter(this.myCustomGridAdapter); 
} 
+0

即使片段**可能不在活動的視圖層次結構中,findViewById會在活動窗口中查找視圖。因此,只要已經膨脹,您就可以從碎片中找到視圖。 – Simas

+0

然後,我必須編寫所有代碼片段Java類我是否正確?或者有什麼解決方案可以在mainactivity類中找到片段視圖? –

+0

你想知道如果你需要實現自定義片段類嗎? - 是的 – Vaizadoo

0

此代碼:

GridView gv = (GridView)findViewById(R.id.gridview); // debugging and always null 
gv.setAdapter(new AdapterB(this,WallPaperList)); 

應在你的片段的onCreateView裏面。您應該創建獨立於其所附活動的片段。

如果您確實需要從活動訪問片段的佈局,你需要延遲findViewById因爲當你把它叫做片段的佈局尚未膨脹:

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     GridView gv = (GridView)findViewById(R.id.gridview); 
     gv.setAdapter(new AdapterB(this, WallPaperList)); 
    } 
}, 1000); 

儘管這段代碼會工作,我強烈不鼓勵你使用它!

+0

然後我必須在這裏再次提問。我如何發送主活動上下文到片段類到我的適配器內部類? –

+0

@EmreErol你的意思是'getActivity()'? – Simas

+0

是的,謝謝。我處理它! –