2016-11-01 1 views
0

Ich versuche, dies aber Fehler zu machen.Klicken Sie auf Schaltfläche, um ein Argument von einem Fragment an ein anderes Fragment zu übergeben

Wenn ich auf eine Schaltfläche klicke und es die Funktion "showData()" ausführt; Der Grund, warum ich diese Funktion ausführen möchte, weil ich ein Fragment ändern möchte, wenn ich auf diese Schaltfläche klicke und auch die Argumente an das neue Fragment übergeben. So wird weiterhin die Funktion "passData()" ausgeführt;

Aber es wird NullPointerException nach 「editTextNAME.setText (restaurant.name); "diese Linie.

showdata()

public void showData(View view){ 
    RestaurantRepo repo = new RestaurantRepo(this); 
    ArrayList<HashMap<String, String>> restaurantList = repo.getRestaurantList(); 
    if (restaurantList.size()!=0) { 
     ListView lv = (ListView) findViewById(R.id.list); 
     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
       restaurantID = (TextView) view.findViewById(R.id.restaurantID); 
       String idRestaurant = restaurantID.getText().toString(); 

       Bundle data = new Bundle(); 
       data.putString("restaurantID", idRestaurant); // argument 

       Fragment fraUorD = null; 
       fraUorD = new EditFragment_Fix_UorD(); 

       if (null != fraUorD) { 
        android.app.FragmentManager fragementManager = getFragmentManager(); 
        android.app.FragmentTransaction transaction = fragementManager.beginTransaction(); 
        transaction.replace(R.id.content_frame, fraUorD); 
        transaction.addToBackStack(null); 
        transaction.commit(); 
        passData(data); // when transaction done , execute passData() -> i want to pass argument when the new fragment come out 
       } 

      } 
     }); 

     ListAdapter adapter = new SimpleAdapter(MainActivity.this,restaurantList, R.layout.edit_fragment_fix_view, 
       new String[] { "id","name","type","price","phone","addr"}, 
       new int[] {R.id.restaurantID, R.id.restaurantNAME,R.id.restaurantTYPE, 
         R.id.restaurantPRICE,R.id.restaurantPHONE,R.id.restaurantADDR}); 
     lv.setAdapter(adapter); 
    } 

    else 
     Toast.makeText(this,"No restaurant!",Toast.LENGTH_SHORT).show(); // no data 

passData()

public void passData(Bundle data){ 

    int a = Integer.parseInt(data.getString("restaurantID", "")) ; // get it 

    Toast.makeText(this, ""+a,Toast.LENGTH_SHORT).show(); 

    editTextNAME = (EditText) findViewById(R.id.editTextUpdateName); 
    editTextTYPE = (EditText) findViewById(R.id.editTextUpdateType); 
    editTextPRICE = (EditText) findViewById(R.id.editTextUpdatePrice); 
    editTextPHONE = (EditText) findViewById(R.id.editTextUpdatePhone); 
    editTextADDR = (EditText) findViewById(R.id.editTextUpdateAddr); 

    RestaurantRepo repo = new RestaurantRepo(this); 
    Restaurant restaurant = new Restaurant(); 
    restaurant = repo.getRestaurantById(a); 

    // Everything is ok, but when executing codes below here will get errors 
    // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 

    editTextNAME.setText(restaurant.name); 
    editTextTYPE.setText(String.valueOf(restaurant.type)); 
    editTextPRICE.setText(String.valueOf(restaurant.price)); 
    editTextPHONE.setText(restaurant.phone); 
    editTextADDR.setText(restaurant.addr); 
} 

Logcat hier:

java.lang.NullPointerException: Der Versuch, virtuelle Methode ‚Leere android.widget.EditText aufzurufen. setText (java.lang.CharSequence) 'für einen Null-Objektverweis bei com.example.user.foody.MainActivity $ override.passData (MainActivity.java:284) bei com.example.user.foody.MainActivity $ override.access $ dispatch (MainActivity.java) bei com.example.user.foody.MainActivity.passData (MainActivity.java.com) bei com.example.user. foody.MainActivity $ 2 $ override.onItemClick (MainActivity.java:244) bei com.example.user.foody.MainActivity $ 2 $ override.access $ dispatch (MainActivity.java) bei com.example.user.foody.MainActivity $ 2 .onItemClick (MainActivity.java:0)

+0

In dem Layout-Datei 'R.id.editTextUpdateName' definiert? editTextNAME ist null (d. h. kann von findViewById nicht gefunden werden). – Jeremy

+0

@ Jeremy Ich versuche zu testen, dass fünf Codes, alle von ihnen null sind .. Ich weiß nicht, warum , die mich wirklich verwirrt – Kevin

+0

Sorry, ich löschte meinen vorherigen Kommentar. – Jeremy

Antwort

0

Das Problem besteht darin, dass Sie ViewbyId on Fragment vor OnViewCreated nicht finden können.

Ich empfehle diesen Artikel über die Weitergabe von Daten durch Fragmente zu lesen. http://gunhansancar.com/best-practice-to-instantiate-fragments-with-arguments-in-android/

wichtiges Stück:

public static MyFragment newInstance(...) 
+0

Vielen Dank so viel bro !! – Kevin

+0

Großartig! wenn es helpul als aufgelöst markiert wurde. Grüße –

+0

Hallo, vielen Dank, aber jetzt habe ich ein kleines Problem. Wenn ich schreibe Fragmentfragment = neues Fragment().newInstance Diese "newInstance-Methode kann gewählt werden" aber "kann nicht aufgelöst werden" Wissen Sie warum? Liege ich falsch? – Kevin

Verwandte Themen