2016-03-21 18 views
0

Uygulamam, sekmeler oluşturmak için bir ViewPager ile ilişkili Fragments kullanıyor.Android parçamı SimpleCursorAdapter alt sınıfından nasıl değiştirebilirim?

Bir sekmede, veritabanımdaki içeriği bir tabloda görüntülemek için bir ListView kullanıyorum. Listemin her bir satırında bazı özel görevleri gerçekleştirmek için SimpleCursorAdapter'i genişletdim (örneğin, alternatif satır rengi, düğmeler, vb.). Bir noktada, bir satırdaki bir simgeyi tıklatıp sekmeleri değiştirmeyi istiyorum, ancak CustomSimpleCursorAdapter sınıfımdan FragmentManager ve ViewPager'a erişme sorunları yaşıyorum. Bunu parçanın kendisi içinde yapabilirim (yorumlanmış bölüme bakın), ancak CustomSimpleCursorAdapter kullanmaya geçtiğimde, bu yeteneğini kaybettim.

FragmentManager'ım ve ViewPager'ım özel sınıfımdan nasıl erişebilirim?

not

: Ben

CustomSimpleCursorAdapter.java Home.java

package myPackage; 

public class Home extends Fragment { 

    private View rootView; 
    private CustomSimpleCursorAdapter mySimpleCursorAdapter; 
    private ViewPager myViewPager; 
    private SwipeRefreshLayout studentSwipeRefresh; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

     rootView = inflater.inflate(R.layout.home, container, false); 
     myViewPager = (ViewPager) getActivity().findViewById(R.id.pager); 
     studentSwipeRefresh = (SwipeRefreshLayout) rootView.findViewById(R.id.student_swipe_refresh); 

     return rootView; 
    } 

    @Override 
    public void onViewCreated(View rootView, Bundle savedInstanceState) { 
     super.onViewCreated(rootView, savedInstanceState); 

     drawTheStudentView(); 

     studentSwipeRefresh.setColorSchemeColors(Color.parseColor(Constants.RED), Color.parseColor(Constants.ORANGE), Color.parseColor(Constants.YELLOW), Color.parseColor(Constants.GREEN), Color.parseColor(Constants.BLUE), Color.parseColor(Constants.INDIGO), Color.parseColor(Constants.VIOLET)); 
     studentSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       studentSwipeRefresh.setRefreshing(false); 
       drawTheStudentView(); 
      } 
     }); 
    } 

    private void drawTheStudentView(){ 
     DatabaseHelper myDBHelper = new DatabaseHelper(getActivity()); 

     Cursor studentCursor = myDBHelper.getStudentsCursor(); 
     String[] fromColumns = {"_id","studentID","location"}; 
     int[] toViews = {R.id.student_number_textview, R.id.student_id_textview, R.id.student_location.textview}; 
     mySimpleCursorAdapter = new CustomSimpleCursorAdapter(getActivity(), R.layout.student_layout, studentCursor, fromColumns, toViews, 0); 

     // Replace the _id column with a student count 
     mySimpleCursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 
      @Override 
      public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
       String counter = Integer.toString((cursor.getPosition()+1)); 
       TextView modifiedTextView = (TextView) view; 
       if(columnIndex == 0){ 
        modifiedTextView.setText(counter); 
        return true; 
       } 
       return false; 
      } 
     }); 

     ListView myListView = (ListView) rootView.findViewById(R.id.student_row); 

     // I COMMENTED THIS OUT. THIS WORKS FOR CLICKING THE ENTIRE ROW AND HAVING AN ACTION PERFORMED. 
     // Listen for somebody clicking on a Student ID, and process 
//  myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
//   @Override 
//   public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
//    Cursor subCursor = (Cursor) mySimpleCursorAdapter.getItem(position); 
//    String studentIDNumber = subCursor.getString(subCursor.getColumnIndex("studentID")); 
// 
//    StudentInformation studentInformation = (StudentInformation) getFragmentManager().findFragmentByTag(getFragmentTag(Constants.TAB_INDEX_PATIENT_VITALS)); 
//    studentInformation.setStudendIDNumber(studentIDNumber); 
// 
//    myViewPager.setCurrentItem(Constants.TAB_INDEX_STUDENT_LOCATION); 
//   } 
//  }); 

     // Draw the list 
     myListView.setAdapter(mySimpleCursorAdapter); 

     myDBHelper.close(); 
    } 

    // Pass me a tab index (see Constants.java) and I'll return a refrence to that tab. 
    private String getFragmentTag(int tagID){ 
     return "android:switcher:" + R.id.pager + ":" + tagID; 
    } 
} 

// THIS IS WHERE I AM HAVING ISSUES WITH: 

ile sorun yaşıyorum CustomSimpleCursorAdapter.java içindeki konumu işaretlediğiniz

package myPackage; public class CustomSimpleCursorAdapter extends SimpleCursorAdapter { private Context context; private Cursor cursor; public CustomSimpleCursorAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to, int flags) { super(context, layout, cursor, from, to, flags); this.context = context; this.cursor = cursor; } @Override public View getView(final int position, View convertView, ViewGroup parent){ // Alternate the color of the data rows. View row = super.getView(position, convertView, parent); if(position % 2 == 0){ row.setBackgroundColor(Color.parseColor(Constants.WHITE)); } else { row.setBackgroundColor(Color.parseColor(Constants.LIGHTGREY)); } // If the "Information" icon/button is clicked, set the information and switch to that tab/fragment. ImageView statusButton = (ImageView)row.findViewById(R.id.student_status_button); statusButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View myView) { cursor.moveToPosition(position); String studentID = cursor.getString(1); Toast statusToast = Toast.makeText(context, "Showing information for student " + studentID, Toast.LENGTH_SHORT); statusToast.show(); // THIS IS WHERE I AM HAVING ISSUES WITH: // * getFragmentManager() // * myViewPager.setCurrentItem() StudentInformation studentInformation = (StudentInformation) getFragmentManager().findFragmentByTag(getFragmentTag(Constants.TAB_INDEX_STUDENT_INFORMATION)); studentInformation.setStudentNumber(studentID); myViewPager.setCurrentItem(Constants.TAB_INDEX_STUDENT_INFORMATION); } }); // If the "Location" button is clicked, then show a Toast with the information. ImageView locationButton = (ImageView)row.findViewById(R.id.student_location_button); locationButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View myView) { cursor.moveToPosition(position); String studentID = cursor.getString(1); Toast statusToast = Toast.makeText(context, "Sending location for student " + studentID + " to MESA", Toast.LENGTH_LONG); statusToast.show(); } }); return row; } // Pass me a tab index (see Constants.java) and I'll return a refrence to that tab. private String getFragmentTag(int tagID){ return "android:switcher:" + R.id.pager + ":" + tagID; } } 

GÜNCELLEME:

benim CustomSimpleCursorAdapter yapıcısı içine FragmentManager ve ViewPager referanslar geçen çalıştı, ancak bu işe görünmüyordu.

+0

Bu imleç bağdaştırıcısını birden fazla etkinlikte mi kullanıyorsunuz, yoksa sadece bir? –

+0

@TerryWhite Sadece bir etkinlik. – Brian

+0

Bağdaştırıcınızın yapıcısındaki parçaya bir referans iletmeniz yeterlidir. Daha sonra ViewPager ve FragmentManager'a erişebilirsiniz, tabii ki, bu referanslar parçaya özel olduğundan, fragmanda bazı alıcı yöntemleri yapmanız gerekir. – Luksprog

cevap

İlgili konular