2014-02-15 3 views
1

Я работаю над приложением, и у меня есть следующий код:Кнопки не работают в андроида фрагментов

package com.S.A.Productions.android.first; 

import com.S.A.Productions.android.first.R; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 

public class FirstActivity extends Fragment implements OnClickListener { 

    int counter; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

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

     TextView temp = (TextView) v.findViewById(R.id.textView2); 

     //Set the buttons 
     Button button2 = (Button) v.findViewById(R.id.button2); 


     //+++ BUTTON 
     button2.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub//Get content of TextView 
       TextView temp = (TextView) v.findViewById(R.id.textView2); 
       //Convert the string to an integer 
       counter = Integer.parseInt(temp.getText().toString()); 
       counter++; 
       temp.setText("" + counter); 
       String stringData = temp.getText().toString(); 
       SharedPreferences.Editor editor = someData.edit(); 
       editor.putString("sharedString", stringData); 
       editor.commit(); 
      } 

     }); 
     //END OF +++ BUTTON 

     return v; 
    } 


} 

Но когда я запустить приложение и я нажимаю на эту кнопку сбои приложения. Я использую «v.findViewById» И в конце я возвращаю v. Поэтому я не знаю, что именно не так. Любые идеи?

+0

Можете ли вы разместить трассировку и свой макет lin xml? – Niko

+1

опубликуйте свой Logcat. – SMR

ответ

0

Конфликт приходит потому, что View v внутри OnClick и надутый вид v различны. Этот код будет работать:

public class FirstActivity extends Fragment implements OnClickListener { 

int counter; 
View v ; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

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

    TextView temp = (TextView) v.findViewById(R.id.textView2); 

    //Set the buttons 
    Button button2 = (Button) v.findViewById(R.id.button2); 


    //+++ BUTTON 
    button2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub//Get content of TextView 
      TextView temp = (TextView) this.v.findViewById(R.id.textView2); 
      //Convert the string to an integer 
      counter = Integer.parseInt(temp.getText().toString()); 
      counter++; 
      temp.setText("" + counter); 
      String stringData = temp.getText().toString(); 
      SharedPreferences.Editor editor = someData.edit(); 
      editor.putString("sharedString", stringData); 
      editor.commit(); 
     } 

    }); 
    //END OF +++ BUTTON 

    return v; 
    } 
} 
+0

Я понимаю. Я только что изменил «v» на «myView», теперь все работает! Большое вам спасибо, я пытался получить это в течение многих часов. – Rorrim

+0

upvote, если это помогло ... – amalBit

+0

Мне не хватает репутации :( – Rorrim

0

Аргумент v onClick(View v) - это элемент, который был нажат, в вашем случае, button.

Ошибка в том, что вы используете аргумент V (который является button) в качестве группы просмотра, пытаясь найти ваш текстовый вид по идентификатору из самого button. Значение textView будет равно нулю. setText() вызовет сбой.

Вам необходимо использовать findviewbyid() в любом из контейнеров textView в иерархии представлений.

+0

Я понял, что ты прав! Спасибо огромное! – Rorrim

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