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)
In dem Layout-Datei 'R.id.editTextUpdateName' definiert? editTextNAME ist null (d. h. kann von findViewById nicht gefunden werden). – Jeremy
@ Jeremy Ich versuche zu testen, dass fünf Codes, alle von ihnen null sind .. Ich weiß nicht, warum , die mich wirklich verwirrt – Kevin
Sorry, ich löschte meinen vorherigen Kommentar. – Jeremy