2017-10-09 9 views
0

La valeur de chaîne, c'est-à-dire accountname, n'est pas transmise au fragment.Comment transmettre des données de l'adaptateur à un fragment dans android studio

En classe Adaptateur

Dashboard fragobj = new Dashboard(); 
bundle = new Bundle(); 
bundle.putString("accountname", accountName); 
// set Fragment class Arguments 
fragobj.setArguments(bundle); 

Dans Fragment

lvDashboard = (ListView) view.findViewById(R.id.lvDashboard); 

if (getArguments()!= null) { 
    accountname = getArguments().getString("accountname"); 
} 

tasks = new ArrayList<String>(); 
tasks.add(tasks.size(),accountname); 
lvDashboard.setAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,tasks)); 

Il semble bien, mais la valeur de chaîne ne sont pas stockées dans accountname variable fragment.

+2

quel est le problème avec le code actuel? –

+0

il semble bien, mais la valeur satring n'est pas stockée dans la variable acountname dans le fragment –

+0

Utilisez-vous cette instance de fragment? – PedroHawk

Répondre

0

Vous pouvez utiliser Listener/Callback dans quelque chose de votre adaptateur personnalisé comme celui-ci:

public class NameAdapter extends ArrayAdapter<String> { 
    ... 

    private AdapterListener mListener; 

    // define listener 
    public interface AdapterListener { 
    void onClick(String name); 
    } 

    // set the listener. Must be called from the fragment 
    public void setListener(AdapterListener listener) { 
    this.mListener = listener; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

    // view initialization 
    ... 

    // here sample for button 
    btButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       // get the name based on the position and tell the fragment via listener 
       mListener.onClick(getItem(position)); 
      } 
     }); 

     return convertView; 
    } 
} 

Réglez ensuite l'auditeur dans votre fragment:

lvDashboard = (ListView) view.findViewById(R.id.lvDashboard); 
lvDashboard.setAdapter(yourCustomAdapter); 
yourCustomAdapter.setListener(new YourCustomAdapter.AdapterListener() { 
    public void onClick(String name) { 
     // do something with the string here. 

    } 
}); 

Ou, vous pouvez utiliser setOnItemClickListener de le ListView:

lvDashboard.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     String name = parent.getItemAtPosition(position); 
     // do something with the string here. 
    } 
});