2015-11-16 65 views
-3

PrintScreenAndroid的:如何在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); 
    } 
}); 

編輯1:不知道你onClickListener的NullPointerException異常是否上線82或發生83你的適配器類,但你可能需要傳遞上下文。以下內容添加到您當前代碼:

下面List list = new ArrayList();添加Context context;

構造函數更改爲:

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

,看看它是否解決了問題。

編輯2:或者留下您的原代碼不變,並在onClickListener,改變到​​而您需要添加下面的方法:

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

我收到此錯誤信息 顯示java.lang.NullPointerException at line 82 and line 82 is intent.setData(Uri.parse(「tel:」+ dataProvider.getTelePhone()。trim())); – user2983359

+0

在聲明handler.telePhone資源之前是否插入了onClickListener?沒有更多的logcat信息,就無法查明異常情況。 – mjp66

+0

不,我沒有在handler.telePhone之前聲明它 – user2983359

0

寫您的點擊收聽列表視圖然後打開手機撥號程序是這樣的:

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); 


     } 

    });