2011-05-02 6 views
0

Je souhaite ajouter un bouton dans chaque élément de la liste et lorsque l'utilisateur appuie dessus pour passer un appel téléphonique. Mais quand l'utilisateur appuie sur le texte, rien ne se passe ... est-ce possible? Ceci est mon code:ajouter un bouton dans une listeVoir

public class museum extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.museum); 


     ListView list = (ListView) findViewById(R.id.list); 

     ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 


     HashMap<String, String> map = new HashMap<String, String>(); 
     map.put("name", "Archaeological Museum of Chania"); 
     map.put("address", "Chalidon 21 , Chania"); 

     mylist.add(map); 
     map = new HashMap<String, String>(); 
     map.put("name", "Byzantine Museum"); 
     map.put("address", "Theotokopoulou 82 , Chania"); 

     mylist.add(map); 
     // ... 
     ListAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.row_museum, 
        new String[] {"name", "address"}, new int[] {R.id.TextView01, R.id.TextView02}); 
     list.setAdapter(mSchedule); 



     list.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       switch(position) 
       { 
        case 0: 
          break; 
        case 1: 
         break; 
        case 2: 
         break; 
        case 3: 
         break; 


       } 
      } 
      }); 
    } 
} 
+0

vous pouvez utiliser un adaptateur personnalisé ... –

Répondre

1

Ya vous pouvez faire. Pour cela

  1. Vous devrez créer un fichier de disposition pour la ligne de liste qui contient la vue de texte et le bouton.
  2. Utilisez cette disposition dans un ArrayAdapter personnalisé.

Voir un exemple dans ce site.

+0

j'ai vu cet exemple mais comme je suis nouveau dans le développement android je le trouve trop compliqué .... :( – kostas

+0

c'est le chemin..peut être la première fois que vous faites face à la question..mais dans beaucoup de cas nous utilisons cela ... nous pouvons étendre BaseAdapter aussi .. – Mathew

+0

la différence avec cet exemple est que je veux entrer moi-même les données et ne pas l'analyser à partir d'un serveur ... donc je dois créer une table de chaînes pour chaque ligne? – kostas

0

Vous devez avoir un adaptateur de liste personnalisé comme celui indiqué ci-dessous.

public class CustomListAdapter extends BaseAdapter { 
private ArrayList<SingleElementDetails> allElementDetails; 
private Context con; 
private LayoutInflater mInflater; 

public CustomListAdapter(Context context, ArrayList<SingleElementDetails> results) { 
    allElementDetails = results; 
    mInflater = LayoutInflater.from(context); 
    con=context; 
     public View getView(int position, View convertView, ViewGroup parent) 
{ 
    convertView = mInflater.inflate(R.layout.listview1, null); 

    Button bt=(Button)convertView.findViewById(R.id.bt); 
    TextView textview1= (TextView) convertView.findViewById(R.id.dishname_entry); 
    TextView textview2 = (TextView) convertView.findViewById(R.id.category_entry); 
    TextView textview3=(TextView)convertView.findViewById(R.id.description_entry); 
    textview1.setText(allElementDetails.get(position).getDishName()); 
    textview2.setText(allElementDetails.get(position).getCategory()); 
    textview3.setText(allElementDetails.get(position).getDescription());  


    bt.setOnClickListener(new OnClickListener(){ 


     public void onClick(View v) { 
      Intent intent=new Intent(con,MainActivity.class); 
      con.startActivity(intent); 

     } 

    }); 
    return convertView; 
}  

}

0

vous pouvez utiliser un adaptateur personnalisé comme celui-ci:

ListView lv_ArchivePartylist; 

ArrayList<Parties> select_archived_party; 

lv_ArchivePartylist = (ListView)findViewById(R.id.archive_ListView01); 
     lv_ArchivePartylist.setOnItemClickListener(new OnItemClickListener() 
      { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
       // TODO Auto-generated method stub 
       if(view.findViewById(R.id.img_chkbox_archive).getVisibility()==TextView.GONE) 
       { 
        view.findViewById(R.id.img_chkbox_archive).setVisibility(TextView.VISIBLE); 
        Toast.makeText(ctx_archive, "Name="+archived_parties.get(position).getPartyTitle(), Toast.LENGTH_SHORT).show(); 
select_archived_party.add(archived_parties.get(position)); 
} 
} 

}); 

Puis, au lieu de textview, utilisez les boutons et sur l'événement de clic individuel ce bouton, vous pouvez écrire le code faire un appel ... J'espère que ça aide :-)

Questions connexes