2016-10-21 2 views
0

Ich sende die Arraylist von einem Fragment zum anderen, indem ich die Schnittstelle benutze. Aber wenn ich die Instanz der Schnittstelle mache, gibt es eine Klassenausnahme. Kann mir jemand sagen, was ich falsch mache ??Senden der Arraylist über die Schnittstelle gibt Klasse Cast Ausnahme?

Das ist meine Schnittstelle: -

public class SaleFragment extends UpdatableFragment { 

    private SendArrayList mSendArrayList; 

    public interface SendArrayList { 

      public void sendData(ArrayList<String> listCustomer); 

     } 
    } 

Und dies ist der Code, wo ich die Instanz der Schnittstelle mache und fügen Sie die Arraylist hinzu: -

@Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     mSendArrayList = (SendArrayList)getActivity(); 

     dbh = new DatabaseHandler(getContext()); 

     Cursor cursor = dbh.getAllCustomer(); 
     if (cursor.moveToFirst()) { 
      do { 
       String customerName = cursor.getString(0); 
       mListCustomerName.add(customerName); 

      } while (cursor.moveToNext()); 
     } 

     mSendArrayList.sendData(mListCustomerName); 



    } 

an dieser Linie " mSendArrayList = (SendArrayList) getActivity(); " Gibt Klasse Cast Exception Kann mir jemand sagen, wie kann ich die Schnittstelle für das Senden der Daten von einem Fragment zum anderen verwenden.

+0

y implementieren do u ein setzen Schnittstelle in einer Klasse? =/ – Mox

+0

@Mox, weil ich wissen möchte, wie man die Daten über die Schnittstelle von einem Fragment zum anderen sendet. – LoveAndroid

+1

Anstatt die Schnittstelle zu verwenden, müssen Sie lediglich mlistCustomerName in Activity deklarieren und versuchen, diese Liste auf Fragment zu aktualisieren. –

Antwort

1

Sie erhalten die Activity-Instanz von der OnAttach() - Methode.

Die folgende Methode im Fragment wird aufgerufen, wenn der Benutzer auf ein Listenelement klickt. Das Fragment verwendet die Callback-Schnittstelle, um das Ereignis an die übergeordnete Aktivität zu übergeben.

@Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // Send the event to the host activity 
     mCallback.onArticleSelected(position); 
    } 

Die Aktivität sollte Ihre Interface.then implementieren Sie die Daten von Fragmente zu Aktivität senden, wird es zu einem anderen Fragmente geteilt werden.

public static class MainActivity extends Activity 
     implements HeadlinesFragment.OnHeadlineSelectedListener{ 
    ... 

    public void onArticleSelected(int position) { 
     // The user selected the headline of an article from the HeadlinesFragment 
     // Create your second fragment instance here and share your data (position) 
    } 
} 

Referenz: https://developer.android.com/training/basics/fragments/communicating.html#Deliver

0

Seine einfache, erhalten Instanz Schnittstelle in onAttach

private SendArrayList mCallback; 
    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     try { 
      mCallback = (SendArrayList) context; 
      dbh = new DatabaseHandler(getContext()); 
      Cursor cursor = dbh.getAllCustomer(); 
      if (cursor.moveToFirst()) { 
       do { 
        String customerName = cursor.getString(0); 
        mListCustomerName.add(customerName); 
       } while (cursor.moveToNext()); 
      } 
      mCallback.sendData(mListCustomerName); 
     } catch (ClassCastException e) { 
      throw new ClassCastException(context.toString() 
        + " must implement SendArrayList"); 
     } 
    } 

Und in Ihrer Mutter Aktivität, müssen Sie SendArrayList Schnittstelle

Verwandte Themen