2015-11-16 1 views
-3

PrintScreenAndroid: Как вставить кнопку вызова в Listview

У меня есть ListView с 3 Просмотров 1) ImageView 2) TextView 3) Кнопка

То, что я хочу сделать то, что, когда Я нажимаю на кнопку, она запускается и вызывает конкретного человека. телефонные номера сохраняются в файле strings.xml, как

<string-array name="telePhoneNummber"> 
     <item>123</item> 
     <item>8765</item> 
     <item>565767</item> 
</string-array> 

А вот мой адаптер класса.

public class MoviesAdapter extends ArrayAdapter { 

List list = new ArrayList(); 


public MoviesAdapter(Context context, int resource) { 
    super(context, resource); 
} 

static class DataHandler { 
    ImageView Poster; 
    TextView title; 
    Button telePhone; 
} 

@Override 
public void add(Object object) { 
    super.add(object); 
    list.add(object); 
} 

@Override 
public int getCount() { 
    return this.list.size(); 
} 

@Override 
public Object getItem(int position) { 
    return this.list.get(position); 
} 

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

    DataHandler handler; 
    if (convertView == null) { 

     LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.row_layout, parent, false); 
     handler = new DataHandler(); 
     handler.Poster = (ImageView) row.findViewById(R.id.movie_poster); 
     handler.title = (TextView) row.findViewById(R.id.movie_title); 
     handler.telePhone = (Button) row.findViewById(R.id.btn_call); 

     row.setTag(handler); 

    } else { 
     handler = (DataHandler) row.getTag(); 
    } 

    MovieDataProvider dataProvider; 
    dataProvider = (MovieDataProvider) this.getItem(position); 
    handler.Poster.setImageResource(dataProvider.getMovie_poster_resource()); 
    handler.title.setText(dataProvider.getMovie_title()); 
    handler.telePhone.setText(dataProvider.getTelePhone()); 

    return row; 
} 

}

Не обращать внимание на именовании пожалуйста.

ответ

0

В вашем методе GetView(), просто добавьте onClickListener() на соответствующую кнопку ресурса ...

handler.telePhone.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     // Intent to launch phone dialer 
     Intent intent = new Intent(Intent.ACTION_DIAL); 
     intent.setData(Uri.parse("tel:" + dataProvider.getTelePhone().trim())); 
     context.startActivity(intent); 
    } 
}); 

EDIT 1: не уверены в том, происходит NullPointerException в вашем onClickListener на линии 82 или 83 вашего адаптера, но вам, вероятно, необходимо передать ему контекст. Добавьте следующий к текущему коду:

Ниже List list = new ArrayList(); добавить Context context;

Изменить конструктор:

public MoviesAdapter(Context context, int resource) { 
    super(context, resource); 
    this.context = context; 
} 

И посмотреть, если это решает проблему.

EDIT 2: Или оставьте свой исходный код нетронутым и в onClickListener, изменить к initActivity(intent);, для которого необходимо добавить следующий метод:

private void initActivity(Intent intent) { 
    this.getContext().startActivity(intent); 
} 
+0

Я получаю это сообщение об ошибке java.lang.NullPointerException в строке 82 и строке 82 - . Int.setData (Uri.parse ("tel:" + dataProvider.getTelePhone(). Trim())); – user2983359

+0

Вы вставляете onClickListener перед объявлением ресурса handler.telePhone? Без дополнительной информации о logcat невозможно исключить исключение. – mjp66

+0

Нет, я не объявляю это раньше handler.telePhone – user2983359

0

Написать свой Listview на клик слушателя и открыть номеронабиратель, как это:

listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      String[] numberArray= context.getResources().getStringArray(R.array.telePhoneNummber); // get array from strings.xml 

     // launch dialer with pre-filled phone number 
     Intent phoneDialerIntent= new Intent(Intent.ACTION_DIAL); 
     phoneDialerIntent.setData(Uri.parse("tel:" + numberArray[position])); 
     startActivity(phoneDialerIntent); 


     } 

    }); 

 Смежные вопросы

  • Нет связанных вопросов^_^