Я пытаюсь сделать это, но ошибки.Нажмите кнопку, чтобы передать аргумент из фрагмента в другой фрагмент
Когда я нажимаю кнопку, и она выполняет функцию «showData()»; Причина, по которой я хочу выполнить эту функцию, потому что я хочу изменить фрагмент, когда Я нажимаю эту кнопку, а также «передаю аргументы» новому фрагменту. Таким образом, он будет продолжать выполнять функцию «passData()»;
Но он получит NullPointerException после 「editTextNAME.setText (имя ресторана); 」Эту строку.
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 здесь:
java.lang.NullPointerException: Попытка вызвать виртуальный метод «недействительным android.widget.EditText. setText (java.lang.CharSequence) 'на нулевой ссылке объекта на com.example.user.foody.MainActivity $ override.passData (MainActivity.java:284) at com.example.user.foody.MainActivity $ override.access $ dispatch (MainActivity.java) at com.example.user.foody.MainActivity.passData (MainActivity.java:0) at com.example.user. foody.MainActivity $ 2 $ override.onItemClick (MainActivity.java:244) at com.example.user.foody.MainActivity $ 2 $ override.access $ dispatch (MainActivity.java) at com.example.user.foody.MainActivity $ 2 .onItemClick (MainActivity.java:0)
В какой файл макета 'определен R.id.editTextUpdateName'? editTextNAME имеет значение null (т. е. не может быть найдено findViewById). – Jeremy
@Jeremy я пытаюсь проверить, что пять кодов, все из них являются нулевыми .. я не знаю, почему , что действительно заставляет меня смущаться – Kevin
Извините, я удалил свой предыдущий комментарий. – Jeremy