我有一个回收视图,并希望调用一个在edittext holder.textPhone中编写的电话号码。Action_Call,app一直停。我的代码中有什么错误?
这是我的userAdapter类,它包含回收器视图。
package com.example.mher.citygo;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
public class UserAdapter extends
RecyclerView.Adapter<UserAdapter.UserViewHolder> {
private List<UserModel> list;
public UserAdapter(List<UserModel> list) {
this.list = list;
}
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new UserViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false));
}
@Override
public void onBindViewHolder(final UserViewHolder holder, int position) {
UserModel user = list.get(position);
holder.textFrom.setText(user.from);
holder.textTo.setText(user.to);
holder.textDate.setText(user.date);
holder.textPhone.setText(user.phone);
holder.textPhone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(Intent.ACTION_CALL);
if (ActivityCompat.checkSelfPermission(context, android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
context.startActivity(intent);
return;
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class UserViewHolder extends RecyclerView.ViewHolder
{
TextView textFrom,textTo,textDate,textPhone;
public UserViewHolder(View itemView) {
super(itemView);
textFrom=(TextView) itemView.findViewById(R.id.text_from);
textTo=(TextView) itemView.findViewById(R.id.text_to);
textDate=(TextView) itemView.findViewById(R.id.text_date);
textPhone=(TextView) itemView.findViewById(R.id.phonenumber);
}
}
}
LOGCAT
07-19 15:17:08.500 30009-30009/com.example.mher.citygo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mher.citygo, PID: 30009
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxx.xxxxxxx.xx.xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxx.xx..x..x...x....xxxxxxx-xxxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{b536158 30009:com.example.mher.citygo/u0a74} (pid=30009, uid=10074) with revoked permission android.permission.CALL_PHONE
at android.os.Parcel.readException(Parcel.java:1684)
at android.os.Parcel.readException(Parcel.java:1637)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3101)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
at android.app.Activity.startActivityForResult(Activity.java:4225)
at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
at android.app.Activity.startActivityForResult(Activity.java:4183)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
at android.app.Activity.startActivity(Activity.java:4522)
at android.app.Activity.startActivity(Activity.java:4490)
at com.example.mher.citygo.UserAdapter$1.onClick(UserAdapter.java:45)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
看看这个
Intent callIntent = new Intent(Intent.ACTION_CALL); //use ACTION_CALL class
callIntent.setData(Uri.parse("tel:" + user.phone)); //this is the phone number calling
//check permission
//If the device is running Android 6.0 (API level 23) and the app's targetSdkVersion is 23 or higher,
//the system asks the user to grant approval.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
//request permission from user if the app hasn't got the required permission
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CALL_PHONE}, //request specific permission from user
10);
return;
}else { //have got permission
try{
startActivity(callIntent); //call activity and make phone call
}
catch (android.content.ActivityNotFoundException ex){
Toast.makeText(getApplicationContext(),"yourActivity is not founded",Toast.LENGTH_SHORT).show();
}
}
在 v.getContext()
上调用 startActivity
() 似乎导致了这里的错误。尝试在调用 startActivity()
之前将以下标志添加到您的意图
中:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
您在错误的位置添加了< code>startActivity,请在条件改变后添加此行
holder.textPhone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "1324567890"));
if (ActivityCompat.checkSelfPermission(context, android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "permission not granted", Toast.LENGTH_SHORT).show();
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CALL_PHONE},143);
}else{
context.startActivity(intent);
}
}
});
我已经研究了这个问题的几个SO答案(这里、这里和这里),但没有一个提议的解决方案奏效。我的问题是我的RecyclView列表项没有显示。我在MessengerRecyclAdapter、onCreateViewHolder、onBindViewHolder和getItemCount中设置了断点,并且只调用了第一个。在断点中,我输入了表达式评估器并执行 并得到了预期的答案20。RecyclerVie
我的不调用、甚至构造函数,因此中不显示任何内容。我放了日志进行调试,但没有显示日志。可能是什么问题? 我的适配器: 我的自定义行XML: 而我的片段:
没有任何错误,所有数据似乎都有效。出于某种原因,正在调用与视图相关的其他方法。我已经确保了以下几点: > > 正在调用构造函数,成员变量有效。 父视图是垂直线性布局;没有scrollview,或任何其他具有自己滚动属性的视图。 包含片段的视图被创建并显示在屏幕上。 下面是片段中的声明,后跟适配器。任何帮助都将不胜感激,因为这完全令人困惑。
当我的设备联机时,RecyclerView适配器会按预期工作。脱机时,不会调用onCreateViewHolder。 首先,我知道这一点:Recyclerview不会调用CreateViewHolder,这不是问题所在。getItemCount()返回一个数字 所以,它似乎与在线/离线状态有关,但我无法弄清楚如何。这是适配器:
我用碎片制作了一个mediaplayer应用程序;歌曲、专辑、艺术家、流派、播放列表 这是我的一个片段中的代码,我将以艺术家为例 在我的initRecyClaire View()方法中,我有一个名为“项目”的数组列表,其中包含歌曲艺术家。Main.songs.get艺术家- 现在,当用户点击一个艺术家时,另一个活动将启动ListSong sActivity.java 这是类中的代码ListSong
我想单击按钮将添加到中,但未调用适配器的实现方法。 这是我的代码: CourseDetailAdapter。班 我想为输入数据添加layout,所以我不确定是否正确