2016-07-06 11 views
0

Например, у меня есть A, B, C и main Активность xml с A, B, C main java соответственно.Android Не удается найти просмотры

Я пытался поставить макет кадра в главной Я также создать FM_A, FM_B и FM_C которая представляет собой фрагмент Java связан с A, B, C макета XML

С main - активность навигационной панели, я заменяю фрейм в основном с фрагментом, все было успешно.

Пока я не пытался использовать кнопку в макете, ошибка говоря:

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

ОБНОВЛЕНИЕ: Код добавлен

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

Можете ли вы поделиться кодом, в котором вы устанавливаете 'OnClickListener' на' Button'? – SlashG

+0

Спасибо, ребята, за ваш ответ. Я установил его в файле XML с помощью метода onClick, теперь я отправляю код – Edwardhk

ответ

2

Вам нужен соответствующий метод в вашей main активность в onClick, определенных в XML. Трудно сказать без образца кода, но я подозреваю, что он не определен или вы переместили его в класс фрагмента. onClick в XML должен соответствовать методу в Activity.

public void saveSetting(View v){ 

} 

В качестве альтернативы, вы можете найти вид внутри вашего фрагмента и установите OnClickListener программно, а затем удалить onClick строку из XML. Это обычная практика.

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

спасибо за ваши комментарии, я не понял, что onClick в xml не может применяться к фрагменту, спасибо за напоминание bro – Edwardhk

+0

Он возвращает нулевую ссылку error на view.setOnClickListener (новый вид.OnClickListener() Который: java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.view.View.setOnClickListener (android.view.View $ OnClickListener)' на нулевой ссылке объекта – Edwardhk

+0

Ваш вопрос не есть XML, когда я написал ответ - я подозреваю, что вы, возможно, вставляли в мой код, не меняя идентификатор (я просто написал пример ID, так как я не знал вашего идентификатора). Он должен иметь идентификатор требуемого представления в findViewByID (// ID); Я обновил ответ с помощью идентификатора btnSave, теперь я вижу ваш XML. –

Смежные вопросы