2016-07-06 41 views
0

例如,我有A,B,C和主活動xml分別與A,B,C主 java。Android找不到視圖

我試圖把一個幀佈局在 我還創建FM_A,FM_B和FM_C其是連接到A,B,C佈局XML

由於片段的java 主要是是一個導航欄的活動,我用主要片段替換了框架佈局,都是成功的。

,直到我試圖在佈局中使用的按鈕,一個錯誤說:

Could not find method saveSetting(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'btnSave' 

單獨的活動,而與片段accesssing他們,就可以正常運作,是我做的方式,以便爲一個失誤?

價鏈接:https://www.youtube.com/watch?v=ju837bQOBfg&spfreload=5

UPDATE:代碼添加

Setting.java

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_setting); 

    startLinking(); 
    startSharedPreferences(); 

    // Check for second entry 
    if (sharedPreferences.getString("Name", "") != null) 
    { 
     displayInfo(); 
     btnEdit.setVisibility(View.VISIBLE); 
     btnSave.setVisibility(View.INVISIBLE); 
     btnClear.setVisibility(View.INVISIBLE); 
     btnGoWelcome.setVisibility(View.VISIBLE); 
     etxtName.setEnabled(false); 
     etxtFood.setEnabled(false); 
     spinnerBreed.setEnabled(false); 
    } 
} 
public void startLinking() 
{ 
    etxtName = (EditText) findViewById(R.id.etxtName); 
    etxtFood = (EditText) findViewById(R.id.etxtFood); 
    btnSave = (Button) findViewById(R.id.btnSave); 
    btnClear = (Button) findViewById(R.id.btnClear); 
    btnEdit = (Button) findViewById(R.id.btnEdit); 
    btnGoWelcome = (Button) findViewById(R.id.btnGoWelcome); 

    spinnerBreed = (Spinner) findViewById(R.id.spinnerBreed); 
    adapter = ArrayAdapter.createFromResource(this, R.array.breedNameArr, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinnerBreed.setAdapter(adapter); 
} 

public void startSharedPreferences() 
{ 
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    editor = sharedPreferences.edit(); 
} 

public void saveSetting(View view) 
{ 
    String petName, breed, food, userID; 
    if (TextUtils.isEmpty(etxtName.getText().toString()) == true || spinnerBreed.getCount() == 0 || TextUtils.isEmpty(etxtFood.getText().toString()) == true) 
    { 
     Toast.makeText(this, "Please fill all the info!", Toast.LENGTH_SHORT).show(); 
     return; 
    } else 
    { 
     editor = sharedPreferences.edit(); 
     editor.putString("Name", etxtName.getText().toString()); 
     editor.putString("Food", etxtFood.getText().toString()); 
     editor.putInt("BreedPos", spinnerBreed.getSelectedItemPosition()); 
     editor.putString("Breed", spinnerBreed.getSelectedItem().toString()); 
     editor.commit(); 

     Toast.makeText(this, "SAVE SUCCESS!", Toast.LENGTH_SHORT).show(); 
     btnEdit.setVisibility(View.VISIBLE); 
     btnSave.setVisibility(View.INVISIBLE); 
     btnClear.setVisibility(View.INVISIBLE); 
     btnGoWelcome.setVisibility(View.VISIBLE); 
     etxtName.setEnabled(false); 
     etxtFood.setEnabled(false); 
     spinnerBreed.setEnabled(false); 
    } 
} 

FM_Setting.java(片段)

public class FM_Setting extends Fragment 
{ 
View myview; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
{ 
    myview=inflater.inflate(R.layout.activity_setting, container, false); 
    return myview; 
} 
} 

activity_setting.xml

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/save" 
    android:id="@+id/btnSave" 
    android:onClick="saveSetting" 
    android:background="@android:color/transparent" 
    android:textColor="@color/colorTitleBar" 
    android:layout_below="@+id/etxtFood" 
    android:layout_centerHorizontal="true"/> 
+2

請添加您的代碼..此信息不足以回答您的問題。 – Svel04

+1

你可以分享你在'Button'上設置'OnClickListener'的代碼嗎? – SlashG

+0

謝謝大家的回覆。我用onClick方法在XML文件中設置它,我現在張貼代碼 – Edwardhk

回答

2

你需要在你main活動在你的XML定義的onClick相應的方法。很難說沒有代碼示例,但我懷疑它是未定義的,或者您將其移至片段類。 XML中的onClick必須對應於Activity中的方法。

public void saveSetting(View v){ 

} 

或者,你可以找到你的片段中的觀點,並設置OnClickListener編程,然後從XML的onClick線。這是常見的做法。

View view = getActivity().findViewById(R.id.btnSave); 
view.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       saveSetting(v); 
      } 
     }); 
+0

感謝您的意見,我沒有意識到xml中的onClick無法應用於片段,感謝提醒bro – Edwardhk

+0

它返回空引用view.setOnClickListener錯誤(新視圖。OnClickListener() 哪一個是: java.lang.NullPointerException:嘗試在空對象引用 – Edwardhk

+0

上調用虛擬方法'void android.view.View.setOnClickListener(android.view.View $ OnClickListener)'你的問題沒有當我編寫答案時有XML - 我懷疑你可能在不改變ID的情況下粘貼了我的代碼(我只是寫了一個示例ID,因爲我不知道你的ID)。它需要在findViewByID(// ID)中使用您想要的視圖的ID;我已經用btnSave ID更新了答案,現在我可以看到你的XML。 –