2015-03-19 5 views
1


У меня есть кнопка внутри фрагмента. Если я нажимаю на эту кнопку, ничего не происходит. Я следил за несколькими учебниками, и в основном все делают то, что я делаю. В другом приложении, которое я разработал несколько недель назад, я сделал то же самое, и он работал ... Что я делаю неправильно?
Заранее благодарим за все советы!Фрагмент Android игнорирует кнопку

Фрагмент класса

package com.geko; 

import com.geko.R; 

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.pm.PackageInstaller.Session; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.Toast; 

public class Lev1 extends Fragment implements OnClickListener { 

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

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

    Button button1= (Button) v.findViewById(R.id.level1); 
    button1.setOnClickListener(this); 

    return v;   
} 

@Override 
public void onClick(View v) { 

    Context context = getActivity(); 

    Toast.makeText(context, "Pressed!", 
      Toast.LENGTH_SHORT).show(); 
} 
} 

Фрагмент XML

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout 

    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <Button 
     android:id="@+id/level1" 

     android:layout_width="300dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_margin="8dp" 
     android:text="livello1" 
     /> 

</LinearLayout> 

ответ

1

Объявить свою кнопку на более высокий уровень доступа. В вашем коде объект кнопки вышел из области действия и больше не находится в управляемой памяти. Пример кода:

public class Lev1 extends Fragment implements OnClickListener { 

Button button1; 
... 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

... 
    button1= (Button) v.findViewById(R.id.level1); 
    button1.setOnClickListener(this); 

Интересное примечание: Если вы используете метод вложенного класса, как некоторые предложили, то область объекта кнопки не является проблемой. Но мне нравится, что ваш код использования реализует OnClickListener, что делает код более чистым.

+0

Спасибо, это сработало! Я все еще думаю, что это довольно странная проблема, но пока она решена ... – esseara

+0

Хорошо! Иногда Java JVM работает неправильно, а не идеально. –

+0

@esseara, Если вы считаете, что мой ответ полезен, вы также можете нажать на значок со стрелкой вверх и над галочкой. Добрый день... –

1

Это происходит потому, что вы используете неправильный контекст.

button1.setOnClickListener({ 
    public void onClick(View v) { 
     Context context = getActivity(); 
     Toast.makeText(context, "Pressed!", Toast.LENGTH_SHORT).show(); 
    } 
}); 

EDIT: удалить также import com.geko.R; из импорта!

+1

Это правильный ответ. –

+0

Ни одна из этих работ не работает. Контекст в сторону, я ничего не получаю, даже если я покажу сообщение в журнале при нажатии кнопки. Это похоже на то, что он не получает щелчок. – esseara

+0

@esseara Вы в этом абсолютно уверены? С кодом, который вы здесь задаете, я не понимаю, почему он не работает. –

0

изменение немного в методе onClick:

@Override 
    public void onClick(View v) { 
     switch(v.getId()){ 
      case R.id.level1: 
       Toast.makeText(getActivity(), "Pressed!", 
        Toast.LENGTH_SHORT).show(); 
      break; 
     } 
    } 
+0

Где находится контекст? Проблема в том, что его «Контекст» ошибочен. См. Ответ @ Fondesa. –

1

Замените эту строку

Context context = this.getActivity().getApplicationContext(); 

с

Context context = getActivity(); 
0

Есть несколько способов прослушивания/поймать событие щелчка. Я подозреваю, что в этом проекте есть конфликт с вашим событием. Убедитесь, что контекст является кнопка для мыши с помощью ссылки View или Button (для определенности), как это:

public class Lev1 extends Fragment implements View.OnClickListener { 
... 

public class Lev1 extends Fragment implements Button.OnClickListener { 
... 

Разместить свои импорта в этом Java-файл.

+0

Я добавил импорт. Я попробовал оба ваших решения и ничего не изменил ... – esseara

+0

@esseara, я опубликовал другой ответ, и я думаю, что знаю проблему с корнем. –

1

Вы можете попробовать любой из этих обходных решений, если вы не решите проблему, нажав кнопку.

)

Button button1= (Button) v.findViewById(R.id.level1); 
    button1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

     } 
    }); 

B)

<Button 
    android:id="@+id/level1" 

    android:layout_width="300dp" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_margin="8dp" 
    android:onClick="yourNewMethod" 
    android:text="livello1" 
    /> 

затем на Java

public void yourNewMethod(View v){ 
    //Whatever you need to do 
} 
Смежные вопросы