2016-02-21 127 views
4

處理的onClick這是我第一次嘗試的片段,我不能夠處理的android:的onClick如何在碎片

我有這樣

<Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/save_keywords_button" 
     android:id="@+id/save_keywords" 
     android:layout_marginTop="340dp" 
     android:background="#FF2E7D32" 
     android:textColor="#FFFFFF" 
     android:typeface="normal" 
     android:onClick="myLogic" /> 

我搜索我的片段XML裏面的按鈕許多結果,並且無法獲得處理onClick事件的確切解決方案。

我的問題是,我怎樣才能得到我的按鈕的ID和編寫myLogic方法。 FindViewById()不能在分段中工作,我應該在哪裏編寫該方法? 在片段或我的活動?

+1

看來你沒有谷歌它,你呢?檢查此[鏈接](http://www.vogella.com/tutorials/AndroidFragments/article.html) – Amt87

+1

訪問此鏈接https://developer.android.com/tools/data-binding/guide.html#binding_events – USKMobility

回答

7

更好的辦法是在你的片段來實現OnClickListener到您的片段類和壓倒一切的onCreateView在您指定監聽到你的按鈕。

通過將onClick屬性放入您的XML佈局中,您的加載活動將查找活動中的元素,而不是片段中的元素。這會拋出異常。

我建議閱讀一些片段活動層次結構,以瞭解何時可以訪問片段中的元素。 here

1

嘗試添加方法

public void myLogic(View v) 
+0

在我的mainActivity中添加它,並在按下按鈕時遇到此錯誤 在父代或祖代中找不到方法myLogic(View)android:onClick屬性定義在視圖類android.support.v7.widget.AppCompatButton上的id爲' save_keywords' – Uday

1

如果你需要得到視圖fragmen你可以做到這一點getView().findViewById(R.id.foo);onCreateView()被稱爲後,才:從

public class StartFragment extends Fragment implements OnClickListener{ 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.fragment_start, container, false); 

    Button b = (Button) v.findViewById(R.id.save_keywords); 
    b.setOnClickListener(this); 
    return v; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.save_keywords: 

     ... 

     break; 
    } 
} 
} 

參考。如果您在xml中指定onClick,則無需在程序中編寫任何鏈接到該方法,只需在您的活動中實施該方法即可。

+0

正如您所說,我在主Activity中編寫了一個方法「public void myLogic(View v)」,但當單擊按鈕時出現此錯誤 java.lang.IllegalStateException:找不到方法myLogic(View)in一個父或祖先上下文的android:onClick屬性定義在視圖類android.support.v7.widget.AppCompatButton id爲'save_keywords' – Uday

+0

@Uday我們將需要您的片段和活動的代碼來查看錯誤。手動設置onclick監聽器是個好主意。如果你將在代碼中拼錯你的方法名稱,它將不會被調用。 – callOfCode