2016-07-06 92 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。 –