2016-04-20 8 views
0

Ich habe eine Fragment-Aktivität, die ich verwende, um eine Tab-Leiste zu erstellen. Innerhalb dieser Aktivität plane ich, eine Tabelle oder ListViews mit einigen zufälligen Werten zu setzen.Android-Aktivitätsmethoden in Fragment

Hier ist mein Code:

import com.example.mvaguimaraes.beetrackprov.R; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 
import android.widget.ArrayAdapter; 
import android.widget.Toast; 
import android.widget.TextView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.AdapterView; 


public class Orders extends Fragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.orders, container, false); 

     ListView listView1 = (ListView) findViewById(R.id.listView1); 


     Order[] items = { 
       new Order(1, "Milk", 21.50), 
       new Order(2, "Butter", 15.99), 
       new Order(3, "Yogurt", 14.90), 
       new Order(4, "Toothpaste", 7.99), 
       new Order(5, "Ice Cream", 10.00), 
     }; 

     ArrayAdapter<Order> adapter = new ArrayAdapter<Order>(this, 
       android.R.layout.simple_list_item_1, items); 

     listView1.setAdapter(adapter); 

     listView1.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
            long id) { 

       String item = ((TextView) view).getText().toString(); 

       Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show(); 

      } 
     }); 

    } 

} 

Das Problem ist, dass ich nicht meine Bestellungen Klasse ich diese Fehler fragmentieren und Aktivität erweitern können so in meinem Code bekommen:

Methode findViewById kann nicht aufgelöst werden (int)

ListView listView1 = (ListView) findViewById(R.id.listView1); 

nicht Konstruktor lösen

ArrayAdapter<Order> adapter = new ArrayAdapter<Order>(this, 
       android.R.layout.simple_list_item_1, items); 

Die Methode kann nicht getBaseContext()

Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show(); 

Wahrscheinlich, weil sie erben etwas von Aktivität lösen. Gibt es eine Möglichkeit, sie innerhalb des Fragments arbeiten zu lassen? Sorry für mein Noob-Ness Ich bin neu in Android Development.

auf einem anderen Bildschirm zu öffnen, nachdem ich dieses Recht nach der onItemClick public void Methode habe auf eines der Elemente der Listenansicht klicken:

String item = ((TextView) view).getText().toString(); 

       Intent i = new Intent(getApplicationContext(), OrderDetails.class); 
       i.putExtra("new_variable_name",item); 

       Intent browserIntent = 
         new Intent(Orders.this, OrderDetails.class); 

       startActivity(browserIntent); 
       startActivity(i); 

Ich habe versucht, beide „getApplicationContext()“ zu ersetzen und „Orders

. dies "mit" getActivity() "aber es hat nicht funktioniert.

Antwort

2

Fragmente haben keine findViewById() Methode wie Activities. Stattdessen rufen Sie findViewById() auf Lookup-Ansichten auf View, die vom Aufblasen des Layouts in onCreateView() zurückgegeben werden. Wenn Sie eine Context benötigen, verwenden Sie normalerweise die Activity, an die das Fragment angeschlossen ist, indem Sie getActivity() aufrufen.

public class Orders extends Fragment { 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.orders, container, false); 
     ListView listView1 = (ListView) v.findViewById(R.id.listView1); 

     Order[] items = { 
       new Order(1, "Milk", 21.50), 
       new Order(2, "Butter", 15.99), 
       new Order(3, "Yogurt", 14.90), 
       new Order(4, "Toothpaste", 7.99), 
       new Order(5, "Ice Cream", 10.00), 
     }; 

     ArrayAdapter<Order> adapter = new ArrayAdapter<Order>(getActivity(), 
       android.R.layout.simple_list_item_1, items); 

     listView1.setAdapter(adapter); 

     listView1.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
            long id) { 
       String item = ((TextView) view).getText().toString(); 
       Toast.makeText(getActivity(), item, Toast.LENGTH_LONG).show(); 
      } 
     }); 

     return v; 
    } 
} 
+2

Vielen Dank! Es hat perfekt funktioniert! –

+0

Kannst du mir noch eine Sache helfen? Nachdem ich auf einen Eintrag in der Listview geklickt habe, möchte ich einen neuen Bildschirm/eine neue Aktivität öffnen und den "Gegenstand" an diesen Bildschirm senden. Ich ändere den ursprünglichen Beitrag mit meinem Code. –

+0

Nur die ursprüngliche Frage geändert. Würde es dir etwas ausmachen, mir zu helfen? –