2017-12-23 21 views
0

두 개의 다른 프래그먼트가 있으며 첫 번째 프래그먼트에서 사용자 정의 학생 ArrayList에 새 학생 항목을 추가하고 있습니다. 두 번째 조각에 학생 목록을 표시하는 ListView도 있습니다. 그러나 두 번째 Fragment로 이동하면 최신 ListView가 업데이트되지 않습니다. 그래서 내 질문에 어떻게 내 단편 탭을 변경 한 후 내 ListView를 업데이트 할 수 있습니까?안드로이드 업데이트 프래그먼트 변경 후 마지막리스트 뷰

registerBtn은 단순히 studentsArrayList에 새 항목을 추가합니다.

처음에 "Get"버튼을 사용하여 ListView를 업데이트하려고했지만 작동하지 않았습니다. 내가하고 싶은 일은 StudentsFragment에 전달할 때마다 ListView를 새로 고치는 것입니다.

RegisterFragment.java :

package com.rawsly.android.schoolprogram; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.Random; 

public class RegisterFragment extends Fragment { 
    private static final String TAG = "RegisterFragment"; 
    public ArrayList<Students> studentsArrayList = new ArrayList<>(); 
    private ArrayList<Long> idList = new ArrayList<>(); 
    private TextView studentID; 
    private Button registerBtn, clearBtn, exitBtn; 
    private EditText editName, editLastName, editGender, editFaculty, editDepartment, editAdvisor; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.register_fragment, container, false); 

     studentID = (TextView) view.findViewById(R.id.studentID); 
     studentID.setText(String.valueOf(generateID())); 
     editName = (EditText) view.findViewById(R.id.editName); 
     editLastName = (EditText) view.findViewById(R.id.editLastName); 
     editGender = (EditText) view.findViewById(R.id.editGender); 
     editFaculty = (EditText) view.findViewById(R.id.editFaculty); 
     editDepartment = (EditText) view.findViewById(R.id.editDepartment); 
     editAdvisor = (EditText) view.findViewById(R.id.editAdvisor); 

     registerBtn = (Button) view.findViewById(R.id.registerBtn); 
     registerBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String id = studentID.getText().toString(); 
       String name = editName.getText().toString(); 
       String lastName = editLastName.getText().toString(); 
       String gender = editGender.getText().toString(); 
       String faculty = editFaculty.getText().toString(); 
       String department = editDepartment.getText().toString(); 
       String advisor = editAdvisor.getText().toString(); 

       studentsArrayList.add(new Students(id, name, lastName, gender, faculty, department, advisor)); 
       Toast.makeText(getContext(), "New entry added.", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     clearBtn = (Button) view.findViewById(R.id.clearBtn); 
     clearBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       editName.setText(null); 
       editLastName.setText(null); 
       editGender.setText(null); 
       editFaculty.setText(null); 
       editDepartment.setText(null); 
       editAdvisor.setText(null); 
       studentID.setText(String.valueOf(generateID())); 
      } 
     }); 

     exitBtn = (Button) view.findViewById(R.id.exitBtn); 
     exitBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       System.exit(1); 
      } 
     }); 

     return view; 
    } 

    // Generates a random ID. 
    public long generateID() { 
     Random rnd = new Random(); 
     char [] digits = new char[11]; 
     digits[0] = (char) (rnd.nextInt(9) + '1'); 
     for(int i=1; i<digits.length; i++) { 
      digits[i] = (char) (rnd.nextInt(10) + '0'); 
     } 
     long result = Long.parseLong(new String(digits)); 
     if(idList.contains(result)) { 
      return generateID(); 
     } else { 
      return result; 
     } 
    } 
} 

StudentsFragment.java : 원 모든 레이아웃 방법을 작동하지 않습니다 notifyDataSetChanged()를 호출하면

package com.rawsly.android.schoolprogram; 

import android.app.Dialog; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 

public class StudentsFragment extends Fragment { 
    private static final String TAG = "StudentsFragment"; 
    private EditText txtSearch; 
    private ListView studentsListView; 
    private Button getStudents, updateStudent, deleteStudent, exitBtn; 
    public StudentsAdapter adapter; 
    public ArrayList<Students> studentsArrayList = new ArrayList<>();; 
    public int selectedItem = -1; // to update or delete the data 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.students_fragment, container, false); 


     // Dummy Data 
     studentsArrayList.add(new Students("1122334455", "Ahmet", "Özdemir", "Male", "Mühendislik ve Doğa Bilimleri", "Bilgisayar Mühendisliği", "Tuğba Yıldız")); 
     studentsArrayList.add(new Students("1234567890", "Ezgi", "İmamoğlu", "Female", "Mühendislik ve Doğa Bilimleri", "Bilgisayar Mühendisliği", "Tuğba Yıldız")); 
     studentsArrayList.add(new Students("", "Enise", "Usta", "Female", "Sosyal ve Beşeri Bilimler Fakültesi", "Uluslararası İlişkiler", "Murat Orhun")); 
     studentsArrayList.add(new Students("1122445588", "Sinem", "Ünver", "Female", "Mühendislik ve Doğa Bilimleri", "Endüstri Mühendisliği", "Zehra Yılmaz")); 
     studentsArrayList.add(new Students("2546882547", "Zehra", "Gürçay", "Female", "Mühendislik ve Doğa Bilimleri", "Endüstri Mühendisliği", "Şule Gündüz")); 


     adapter = new StudentsAdapter(getContext(), studentsArrayList); 

     studentsListView = (ListView) view.findViewById(R.id.studentsListView); 
     studentsListView.setAdapter(adapter); 

     studentsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
       selectedItem = position; 
       Toast.makeText(getContext(), "Selected entry: " + (selectedItem+1), Toast.LENGTH_LONG).show(); 
      } 
     }); 

     // Opens a dialog window 
     getStudents = (Button) view.findViewById(R.id.getStudents); 
     getStudents.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       adapter.notifyDataSetChanged(); 
       studentsListView.invalidate(); 
      } 
     }); // end of the add action 

     // To delete the selected School object 
     deleteStudent = (Button) view.findViewById(R.id.deleteStudent); 
     deleteStudent.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if(selectedItem == -1) { 
        Toast.makeText(getContext(), "Please, select an entry first.", Toast.LENGTH_SHORT).show(); 
       } else { 
        studentsArrayList.remove(selectedItem); 
        selectedItem = -1; 
        adapter.notifyDataSetChanged(); 
        Toast.makeText(getContext(), "Selected entry is deleted.", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); // end of the delete action 

     // To exit the program 
     exitBtn = (Button) view.findViewById(R.id.exitBtn); 
     exitBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       System.exit(1); 
      } 
     }); // end of the exit action 

     // To update the selected School object 
     updateStudent = (Button) view.findViewById(R.id.updateStudent); 
     updateStudent.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if(selectedItem == -1) { 
        Toast.makeText(getContext(), "Please, select an entry first.", Toast.LENGTH_SHORT).show(); 
       } else { 
        final Dialog dialog = new Dialog(getContext()); 
        dialog.setContentView(R.layout.update_student); 
        dialog.setTitle("Update An Entry"); 
        // Dialog components - EditText, Button 
        String id = studentsArrayList.get(selectedItem).id; 
        String name = studentsArrayList.get(selectedItem).name; 
        String lastName = studentsArrayList.get(selectedItem).lastName; 
        String gender = studentsArrayList.get(selectedItem).gender; 
        String faculty = studentsArrayList.get(selectedItem).faculty; 
        String department = studentsArrayList.get(selectedItem).department; 
        String advisor = studentsArrayList.get(selectedItem).advisor; 

        final TextView studentID = (TextView) dialog.findViewById(R.id.studentID); 
        final EditText editName = (EditText) dialog.findViewById(R.id.editName); 
        final EditText editLastName = (EditText) dialog.findViewById(R.id.editLastName); 
        final EditText editGender = (EditText) dialog.findViewById(R.id.editGender); 
        final EditText editFaculty = (EditText) dialog.findViewById(R.id.editFaculty); 
        final EditText editDepartment = (EditText) dialog.findViewById(R.id.editDepartment); 
        final EditText editAdvisor = (EditText) dialog.findViewById(R.id.editAdvisor); 

        studentID.setText(id); 
        editName.setText(name); 
        editLastName.setText(lastName); 
        editGender.setText(gender); 
        editFaculty.setText(faculty); 
        editDepartment.setText(department); 
        editAdvisor.setText(advisor); 

        Button updateStudent = (Button) dialog.findViewById(R.id.updateStudent); 
        Button clearStudent = (Button) dialog.findViewById(R.id.clearStudent); 
        Button cancelStudent = (Button) dialog.findViewById(R.id.cancelStudent); 

        // Updates the selected School object 
        updateStudent.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          String id = studentID.getText().toString(); 
          String name = editName.getText().toString(); 
          String lastName = editLastName.getText().toString(); 
          String gender = editGender.getText().toString(); 
          String faculty = editFaculty.getText().toString(); 
          String department = editDepartment.getText().toString(); 
          String advisor = editAdvisor.getText().toString(); 
          studentsArrayList.get(selectedItem).setId(id); 
          studentsArrayList.get(selectedItem).setName(name); 
          studentsArrayList.get(selectedItem).setLastName(lastName); 
          studentsArrayList.get(selectedItem).setGender(gender); 
          studentsArrayList.get(selectedItem).setFaculty(faculty); 
          studentsArrayList.get(selectedItem).setDepartment(department); 
          studentsArrayList.get(selectedItem).setAdvisor(advisor); 

          adapter.notifyDataSetChanged(); 
          Toast.makeText(getContext(), "An entry is updated.", Toast.LENGTH_SHORT).show(); 
          dialog.dismiss(); 
         } 
        }); 

        // Clears all fields 
        clearStudent.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          editName.setText(null); 
          editLastName.setText(null); 
          editGender.setText(null); 
          editFaculty.setText(null); 
          editDepartment.setText(null); 
          editAdvisor.setText(null); 
         } 
        }); 

        // Dismisses the dialog 
        cancelStudent.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 
          dialog.dismiss(); 
         } 
        }); 

        dialog.show(); 
        adapter.notifyDataSetChanged(); // notifying adapter about changes 
       } 
      } 
     }); // end of the update action 

     return view; 
    } 
} 
+0

이 ..이를 참조하십시오 https://developer.android.com/training/basics/fragments/communicating.html –

답변

0

"

문제 해결 어느 쪽이든 도와주세요 .LevelView가 적절하게 업데이트되었다고 믿으십시오. 차이점은 어댑터의 데이터가 어디서 왔는지 확인하는 것입니다.

메모리에 보관중인 콜렉션 인 경우 notifyDataSetChanged()를 호출하기 전에 컬렉션에서 항목을 실제로 삭제했거나 추가했는지 확인하십시오.

데이터베이스 또는 서비스 백엔드로 작업하는 경우 notifyDataSetChanged()를 호출하기 전에 정보를 다시 검색하거나 메모리 데이터를 조작하는 메소드를 호출해야합니다.

사실이 notifyDataSetChanged는 데이터 집합이 변경된 경우에만 작동합니다. 따라서 변경 사항을 찾지 못하면 보게됩니다. 필요한 경우 디버그 "

중복 :. 당신은 인터페이스를 정의 할 수 How to refresh Android listview?