#android
#Android
Вопрос:
Я хочу добавить кнопку в каждый элемент списка, и когда пользователь нажимает ее, чтобы сделать телефонный звонок. Но когда пользователь нажимает текст, ничего happens..is это возможно? Это мой код:
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;
}
}
});
}
}
Комментарии:
1. вы можете использовать пользовательский адаптер…
Ответ №1:
Я, что ты можешь сделать. Для этого
- Вам нужно будет создать файл макета для строки списка, который содержит textview и кнопку.
- Используйте этот макет внутри настроенного ArrayAdapter.
Смотрите пример на этом сайте.
Комментарии:
1. я видел этот пример, но поскольку я новичок в разработке Android, я нахожу его слишком сложным ….: (
2. именно так .. возможно, вы впервые сталкиваетесь с проблемой .. но во многих случаях мы используем это … мы также можем расширить BaseAdapter..
3. разница с этим примером в том, что я хочу сам вводить данные, а не анализировать их из server…so я должен создать таблицу строк для каждой строки?
Ответ №2:
У вас должен быть пользовательский адаптер списка, подобный приведенному ниже.
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;
}
}
Ответ №3:
вы можете использовать пользовательский адаптер, подобный этому:
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));
}
}
});
Затем вместо textview используйте кнопки, и в отдельном событии нажатия на эту кнопку вы можете написать код для выполнения вызова…Надеюсь, это поможет 🙂