2016-09-17 75 views
0

我的Android Studio項目中有2個包含2個XML佈局文件的Java類。第一個類是我的MainActivity類和第二個類顯示的地圖的容器。佈局工作正常,但我的第二個類的XML文件中有一個Button,它被設置爲在單擊時調用第二個類中的方法。但該按鈕只能從我的MainActivity類中調用方法。我如何讓Button調用另一個方法,讓我們說一個來自另一個類的方法,而不是我的MainActivity類?Android:通過單擊按鈕調用不在活動中的方法

非常感謝您的幫助。

在此先感謝。

/編輯:

我現在可以調用其他方法,但每次我嘗試訪問從東西MainActivity類別的應用程序崩潰。代碼示例:

public void test() { 
    TextView tv = (TextView) getActivity().findViewById(R.id.textView); 
    tv.setText("2"); 
} 

這是從第二個類中調用MainActivity類的方法。該調用工作正常,但我無法訪問佈局中的任何內容。如果它有助於該類是包含MapView的片段:

public class MapsFragment extends Fragment { 
+0

添加代碼來顯示你寫的內容。 – W4R10CK

+0

如果第二種方法在Activity類中,您可能會考慮這個錯誤 –

+0

但它不是一個活動類,它是一個片段,它包含在我的MainActivity中。 – s137

回答

0

在Mainactivity中創建第二個類的對象。 然後使用該對象調用第二類的函數。

編輯 -

我看到你不需要創建像fragment_obj.updateTextView函數();.我將我所有的視圖設置爲類級對象,並能夠直接更新textview。

fragmentObj.textViewLanguage.setText("Your Text Here!"); 

注意:如果您需要執行多個動作,則需要執行一個功能。

使用功能 - 您可以通過找到片段的情況下,

對於支持庫,

YourFragment fragment_obj = (YourFragment)getSupportFragmentManager(). 
          findFragmentById(R.id.fragment_id); 

其他

YourFragment fragment_obj = (YourFragment)getFragmentManager(). 
             findFragmentById(R.id.fragment_id); 

然後創建的方法更新您的TextView並使用fragment_obj調用該方法的片段,如

fragment_obj.updateTextView(); 
+0

我試過了,但它只是部分保存了我的問題。我可以調用其他方法,但每次嘗試訪問MainActivity類中的應用程序崩潰時都會發生。代碼示例: public void test(){ TextView tv =(TextView)getActivity()。findViewById(R.id.textView); tv.setText(「2」); } 這是從MainActivity類中調出的第二個類的方法。該調用工作正常,但我無法訪問佈局中的任何內容。 如果它有助於該類是一個MapsFragment: 公共類MapsFragment擴展片段{ – s137

+0

在問題中添加您的代碼! –

+0

我剛添加它。 – s137

0

你不必通過XML 接線的XML按鈕的方法,你可以通過代碼很容易做到這一點:

Button b = (Button) findViewById(R.id.my_button); 
b.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // call the method 
    } 
}); 
0

坐你的XML代碼,並添加此屬性android:onClick="OnClickMe"然後,進入你想要訪問另一種方法的班級,並添加控制按鈕點擊的方法。

首先聲明你的按鈕在Oncreate

Button b = (Button) findViewById(R.id.my_button); 

然後創建以處理按鈕點擊的方法,以及內實例化類來訪問你想要的方法。假設你想訪問ClassA

public void OnClickMe(View v){ 

// Suppose you want to access a method from ClassA 
ClassA accessmethod = new ClassA(); 
// this is how you can call your method in another class 
accessmethod.MethodName(); 

    } 
相關問題