- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在回收站 View 中点击项目时显示上下文菜单,并选择调用名字被点击的人。但是我无法检索电话号码,因为 getMenuInfo() 无法正常工作,因为我在 onCreateContextMenu() 的 contextMenuInfo 中得到一个空值。我引用了很多答案并相应地编写了我的代码,但仍然无法更正它这是我的代码:
menu_actions.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/call"
android:title="Call">
</item>
<item
android:id="@+id/sms"
android:title="Send SMS">
</item>
<item
android:id="@+id/email"
android:title="Send email">
</item>
<item
android:id="@+id/viewContact"
android:title="View Details">
</item>
<item
android:id="@+id/editContact"
android:title="Edit Contact">
</item>
<item
android:id="@+id/deleteContact"
android:title="Delete">
</item>
</menu>
包含回收站 View 的我的 fragment :
public class MyContacts extends Fragment {
public static RecyclerView recyclerView;
public static Person receivedData;
static Context c;
static int itemIndex;
DatabaseAdapter dbAdapter = new DatabaseAdapter(getContext());
private static RecyclerViewAdapter recyclerViewAdapter;
ArrayList<Person> persons = new ArrayList<>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
c = getContext();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
MainActivity activity = (MainActivity) getActivity();
receivedData = activity.getData();
View layout = inflater.inflate(R.layout.fragment_my_contacts, container, false);
recyclerView = (RecyclerView) layout.findViewById(R.id.myContactsList);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerViewAdapter=new RecyclerViewAdapter(activity, persons);
recyclerView.setAdapter(recyclerViewAdapter);
registerForContextMenu(recyclerView);
retrieve();
return layout;
}
public void retrieve()
{
persons.clear();
DatabaseAdapter databaseAdapter = new DatabaseAdapter(c);
databaseAdapter.openDB();
//retrieves the whole table from DB
Cursor cursor = databaseAdapter.getDataForList();
// loop and add to array list
while (cursor.moveToNext())
{
int index1 = cursor.getColumnIndex(Constants.PHONE);
String name = cursor.getString(index1);
......
Person p = new Person(name, phone, address, email, dob, R.id.contactImage);
persons.add(p);
}
//if array list not empty
if (!(persons.size() <1))
{
recyclerViewAdapter.notifyDataSetChanged();
}
databaseAdapter.closeDB();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) // here menuInfo is coming NULL
{
super.onCreateContextMenu(menu, view, menuInfo);
getActivity().getMenuInflater().inflate(R.menu.menu_actions, menu);
menu.setHeaderTitle("Actions");
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
itemIndex = info.position;
}
public boolean onContextItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.call:
call();
Toast.makeText(getContext(), "Calling...", Toast.LENGTH_LONG).show();
return true;
case R.id.sms:
Toast.makeText(getContext(), "SMS", Toast.LENGTH_LONG).show();
return true;
case R.id.email:
Toast.makeText(getContext(), "Email", Toast.LENGTH_LONG).show();
return true;
case R.id.editContact:
Toast.makeText(getContext(), "Editing", Toast.LENGTH_LONG).show();
return true;
case R.id.deleteContact:
Toast.makeText(getContext(), "Deleting", Toast.LENGTH_LONG).show();
return true;
default:
return super.onContextItemSelected(item);
}
}
private void call() {
Log.d("PHONE", String.valueOf(itemIndex));
receivedData = (Person)dbAdapter.getPhone(itemIndex);
Log.d("PHONE",receivedData.getPhone().toString());
Intent call = new Intent(Intent.ACTION_CALL);
call.setData(Uri.parse("tel:" + receivedData.getPhone()));
startActivity(call);
}
上下文菜单回收器 View :
public class ContextMenuRecyclerView extends RecyclerView {
private RecyclerContextMenuInfo mContextMenuInfo ;
public ContextMenuRecyclerView(Context context) {
super(context);
}
public ContextMenuRecyclerView(Context context, AttributeSet attrs)
{
super(context,attrs);
}
public ContextMenuRecyclerView(Context context, AttributeSet attrs, int defStyle)
{
super(context,attrs,defStyle);
}
//I think problem is somewhere in this function. I dont think its getting called.
@Override
protected ContextMenu.ContextMenuInfo getContextMenuInfo()
{
return mContextMenuInfo;
}
@Override
public boolean showContextMenuForChild(View originalView)
{
final int longPressPosition = getChildAdapterPosition(originalView);
if (longPressPosition >=0)
{
final long longPressId = MyContacts.recyclerView.getAdapter().getItemId(longPressPosition); //MyContacts.recyclerView.
mContextMenuInfo = new RecyclerContextMenuInfo(longPressPosition, longPressId);//createContextMenuInfo
return super.showContextMenuForChild(originalView);
}
return false;
}
public static class RecyclerContextMenuInfo implements ContextMenu.ContextMenuInfo
{
//position in adapter for which context menu is being displayed
final public int position;
//row id of the item for which context menu is being displayed
final public long id;
public RecyclerContextMenuInfo(int position, long id)
{
this.position = position;
this.id = id;
}
}
}
我的 RecyclerViewAdapter
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder>{
static Context c;
private LayoutInflater inflater;
List<Person> persons = Collections.emptyList();
public RecyclerViewAdapter(FragmentActivity context, List<Person> persons){
inflater = LayoutInflater.from(context);
this.persons = persons;
this.c = context;
}
//Initializing view holder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.single_row, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
Person current = persons.get(position);
holder.image.setImageResource(R.drawable.contact);
holder.name.setText(current.getName());
holder.phone.setText(current.getPhone());
holder.itemView.setLongClickable(true);
}
@Override
public int getItemCount() {
return persons.size();
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
public static class MyViewHolder extends RecyclerView.ViewHolder
{
ImageView image;
TextView name;
TextView phone;
ItemClickListener itemClickListener;
ContextMenuRecyclerView recyclerView = new ContextMenuRecyclerView(c);
public MyViewHolder(View itemView) {
super(itemView);
image = (ImageView) itemView.findViewById(R.id.listImage);
name = (TextView) itemView.findViewById(R.id.listName);
phone = (TextView) itemView.findViewById(R.id.listPhone);
}
}
请帮我弄清楚!!
最佳答案
我是这样做的,声明了一个字段私有(private)的 MyViewHolder 持有者,而不是让它成为本地的并且在 onCreateContextMenu 中我这样调用它
getItem(vh.getAdapterPosition());
关于android - 在回收站 View 上创建上下文菜单时 menuInfo 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36669113/
出现以下错误 Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable D
在调试应用程序时出现以下错误。 The CLR has been unable to transition from COM context 0x3b2d70 to COM context 0x3b2
在 GAE Go 中,为了记录,我们需要使用 appengine.NewContext(r) 创建一个新的上下文,它返回 context.Context。 如何使用此上下文在请求范围内设置/获取变量?
我想使用 Puppeteer 从放置在页面上 iframe 内的选择器中获取数据,该页面在与其父框架域不同的域上运行。因此,我不是任何域的所有者 - 无法使用 frame.postMessage。 试
我正在尝试获取可用的应用程序上下文并想切换到 webview 上下文,但 appium 仅获取 Navive App。 应用程序还启用了 WebView。 Appium 版本:1.10.1 Chrom
这个问题在这里已经有了答案: How to fix this nullOk error when using the flutter_svg package? (7 个回答) 7 个月前关闭。 当我尝
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
这是代码 obj = { a: 'some value'; m: function(){ alert(this.a); } } obj.m(); 结果是'som
我正在尝试做类似的事情 $(".className").click(function() { $(this).(".anotherClass").css("z-index","1");
var User = { Name: "Some Name", Age: 26, Show: function() { alert("Age= "+this.Age)}; }; fun
我目前正在使用我见过的常见 Context 模式,它允许子组件通过传递修饰函数来更新父组件的状态(即 Provider)通过共享的 Context。 我遇到的问题是,修改函数只引用原始状态,不引用最新
有没有办法让 React Context类型安全与流类型? 例如: Button.contextTypes = { color: React.PropTypes.string }; 最佳答案 不幸
我想知道是否有一种方法可以为不同的功能使用不同的上下文类。 我希望有一个功能使用 MinkExtensions 进行浏览器测试,另一个功能使用和 HTTP 客户端(如 Guzzle)进行 API 测试
我有这个配置文件 apiVersion: v1 clusters: - cluster: server: [REDACTED] // IP of my cluster name: stag
我在实现非抢先式调度时遇到了用于初始化TCB的代码。 typedef struct TCB_t { struct TCB_t *next; struct TCB_t
我想将一个函数设置为数组中每个元素的属性,但使用不同的参数调用它。我想我会使用匿名函数来解决它: for ( var i = 0; i < object_count; i++ ) { obje
这个问题已经有答案了: How to access the correct `this` inside a callback (15 个回答) 已关闭 7 年前。 我正在做一些练习,但我在管道方法中丢
我正在尝试通过 Java 和 Android Studio 学习和制作 Android 应用程序。我对Java的了解程度是两年前几个小时的youtube学习和大学基础类(class)。不过我确实知道如
我在(这个)上遇到了问题。错误ImageView无法应用。我在 fragment 类中执行此代码。 ViewFlipper v_flipper; @Nullable @Override public
我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖性的情况下创建它(不是对 Windows,也不是某些包[SDL,SFML,GLUT])?只允许使用没有外部库的库,就像
我是一名优秀的程序员,十分优秀!