2017-03-14 4 views
-2

Arbeiten an meiner ersten Android-App so nackten mit mir!EditText in Fragment

Ich versuche eine Schaltfläche in einem Fragment zu haben, inkrementiere ein Textfeld, wenn ich darauf klicke, kann ich das nicht tun, wenn ich kein Fragment verwende, aber ich kann es nicht im fragmenet arbeiten.

Ich habe eine sehr grundlegende Test-App erstellt, mit der ich arbeiten kann. Vielen Dank.

Der t1 soll den Wert auf numOfClicks setzen, aber beim Debuggen ist der t1 vaslus immer Null.

private int numOfClicks; 

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

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

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

    Button button2 =(Button)v.findViewById(R.id.btn2); 
    button2.setOnClickListener(this); 


    // EditText t1 = (EditText)v.findViewById(R.id.numClicked); 
    // t1.setOnClickListener(this); 

    return v; 
} 

@Override 
public void onClick(View v) 
{ 
    switch (v.getId()) { 
     case R.id.btn1: 
      //button code here 
      //toast statement works! 
      //Toast.makeText(v.getContext(), "yeah", Toast.LENGTH_SHORT).show(); 

      EditText t1 = (EditText)v.findViewById(R.id.numClicked); 
      numOfClicks++; 
      t1.setText(Integer.toString(numOfClicks)); 


      break; 
     case R.id.btn2: 
      Toast.makeText((v.getContext()), "button 2 pressed", Toast.LENGTH_SHORT).show(); 
      break; 
    } 
} 
+0

Entfernen Sie einfach v.findViewById (R.id.numClicked) von onClick machen Sie onCreateView –

Antwort

1

Declare EditText global:

EditText t1 ; 

initialisieren in onCreateView():

t1 = (EditText)v.findViewById(R.id.numClicked); 

Set Text in onClick():

t1.setText(Integer.toString(numOfClicks)); 
+1

danke! es funktioniert jetzt! – branedge

+0

Sie sind willkommen. :) – tahsinRupam

0

Ihr numOfClicks nicht Wert haben Im Anfang wirst du nur deklarieren nicht gesetzter Wert.

Schritte Ihr Programm:

  1. numOfClicks = null:
  2. numOfClicks ++ (null +1) = null

so für numOfClicks = 0 Sollwert Antwort ist;

1

Sie sollten einen editText in der page1.xml namens numClicked deklarieren. Dann können Sie diesen Code versuchen:

{

private int numOfClicks; 
private EditText t1; 

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

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

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

    Button button2 = (Button) v.findViewById(R.id.btn2); 
    button2.setOnClickListener(this); 


    t1 = (EditText) v.findViewById(R.id.numClicked); 

    return v; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btn1: 
      //button code here 
      //toast statement works! 
      //Toast.makeText(v.getContext(), "yeah", Toast.LENGTH_SHORT).show(); 


      numOfClicks++; 
      t1.setText(Integer.toString(numOfClicks)); 


      break; 
     case R.id.btn2: 
      Toast.makeText((v.getContext()), "button 2 pressed", Toast.LENGTH_SHORT).show(); 
      break; 
    } 
} 

}

+0

danke! es funktioniert jetzt! – branedge

+0

Gern geschehen ^^ –

0

The View v in onClick() Sie .findViewByID auf fordern ist eigentlich die Schaltfläche, die angeklickt wurde (was auch eine Ansicht ist)

Um das Textfeld zu finden, müssen Sie die Ansicht nach der Aktivität suchen. Welche sollten Sie durch den Aufruf v .getParrent(), wenn der Knopf in einem Container, der von der EditText anders bekommen können, ist

0

Sie http://jakewharton.github.io/butterknife/ verwenden könnte Dann können Sie es erklären, wie: @BindView(R.id.numClicked) EditText text;

Auch int numOfClicks = 0; so erklären es hat einen Wert von Anfang an.

und legen Sie auch den Hörer wie folgt aus:

@OnClick(R.id.btn1) 
public void submit(View view) { 
    numOfClicks++; 
     text.setText(Integer.toString(numOfClicks)); 
} 

Und dann in Ihrem OnCreate Sie dies nur haben: ButterKnife.bind(this);

Das ist besser als normale findViewById, weil die Ansichten auf Kompilation erstellen sind, und werden bei onCreate automatisch in die Aktivität eingefügt, was wesentlich effizienter ist als Ihre Standardinitialisierung. Auch so werden die Ansichten als global deklariert, sodass Sie sie überall von der Aktivität aus verwenden können.

1

Nicht tun .. Warum?

  • Der Parameter Ansicht ist die Ansicht der Schaltfläche, die onClick (Touch-Screen) war. Diese Ansicht enthält keine anderen Komponenten, nur sie selbst.
  • Detail: EditText t1 = (EditText) v.findViewById (R.id.numClicked);

    @Override 
        public void onClick(View v) 
        { 
         switch (v.getId()) { 
          case R.id.btn1: 
           //button code here 
           //toast statement works! 
           //Toast.makeText(v.getContext(), "yeah", Toast.LENGTH_SHORT).show(); 
    
           EditText t1 = (EditText)v.findViewById(R.id.numClicked); 
           numOfClicks++; 
           t1.setText(Integer.toString(numOfClicks)); 
    
    
           break; 
          case R.id.btn2: 
           Toast.makeText((v.getContext()), "button 2 pressed", Toast.LENGTH_SHORT).show(); 
           break; 
         } 
        } 
    

    Was tun?

    • Finden Sie Ihren Komponentenverweis in onViewCreated Ereignisse. Aber warum? onViewCreated (Ansicht anzeigen, @Nullable Bundle savedInstanceState), Ansicht Parameter ist Referete "Haupt" anzeigen, sie haben alle Ihre Komponenten dieses Layouts.

      @Override 
      public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
          super.onViewCreated(view, savedInstanceState); 
          t1 = (EditText)v.findViewById(R.id.numClicked); 
      } 
      
    • Dont vergessen: Sie benötigen eine Klasse atribute, Typ EditText mit Namen t1 erstellen Sie dieses Beispiel auszuführen.

    Verwandte Themen