2017-11-25 169 views
-1

我已經創建了一個選項卡布局。我想要撥打一個號碼,我必須定義onCLickListener,請參閱下面Tab2中寫的代碼: 在此錯誤顯示中,MainActivity.this不是封閉類,所以我應該寫什麼而不是這個? (tab2.xml是選項卡的版式文件的名稱)無法使用TabLayout中的呼叫功能進行呼叫

package com.firstapp.admin.herbalteaco; 

import android.Manifest; 
import android.app.Activity; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.net.Uri; 

import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 

/** 
* Created by admin on 11/25/2017. 
*/ 

public class Tab2 extends Fragment implements View.OnClickListener{ 


private TextView tvCall; 
private Button btnLogin; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.tab2 , container , false); 

} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    btnLogin = (Button) btnLogin.findViewById(R.id.btnLogin); 
    btnLogin.setOnClickListener(this); 

    tvCall = (TextView) tvCall.findViewById(R.id.tvCall); 
    tvCall.setOnClickListener((new View.OnClickListener() { 
     public void onClick(View arg0) { 
      Intent callIntent = new Intent(Intent.ACTION_CALL); 
      callIntent.setData(Uri.parse("tel:+91999999999"));; 
      if (ActivityCompat.checkSelfPermission(MainActivity.this, 
        Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
       return; 
      } 
      startActivity(callIntent); 
     } 
    })); 

} 
+0

使用'的getContext()''而不是MainActivity.this' –

+0

使用getApplicationContext(),而不是MainActivity.this –

+0

的應用是越來越墜毀,機上使用的getContext() –

回答

0

試試下面的代碼

定義像下面

int REQUEST_CALL=101; 

請求允許全球vairable像下面

if (ActivityCompat.checkSelfPermission(getContext(), 
        android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(getActivity(), 
       new String[]{android.Manifest.permission.CALL_PHONE}, 
       REQUEST_CALL); 
    } else { 
     Log.e("DB", "PERMISSION GRANTED"); 
     // do your call 

    } 

不要」 t忘記處理onRequestion權限,如下面的

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
    if(requestCode == REQUEST_CALL){ 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission was granted, yay! Do the 
       // Call task you need to do. 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
     } 
    } 
+0

REQUEST_CALL沒有定義,我應該如何界定呢? –

+0

@ A.Rathi查看我的更新回答 – Munir

0

您可以在擴展Fragment的類中調用getActivity()。這會給你帶有片段的Activity實例。由於ActivityContext的子類,因此您可以在需要的任何地方使用此實例Context

+0

請提供我的.java文件的確切代碼 –

+0

@ A.Rathi這不是一個代碼編寫服務。希望你可以把這裏給出的答案放在一起來自己弄清楚。如果不是,我建議你研究遺傳和多態性。 –