为了账号安全,请及时绑定邮箱和手机立即绑定

如何在CustomAdapter类中调用新的意图?

如何在CustomAdapter类中调用新的意图?

慕哥9229398 2023-10-19 21:44:16
我对 Android Studios 相当陌生,并且在从 CustomAdapter 类调用新活动时遇到问题。在应用程序中,用户应该单击 ListView 中的文本并打开一个显示联系人各自详细信息的新活动。我有一个名为openContactDetails的方法,位于MainActivity.java中,它接受参数Context context、String currName、String currNumber。我在CustomAdapter.java中调用openContactDetails。openContactDetails位于MainActivity.java中:    //...prior code    public void openContactDetail(Context context, String currName, String currNumber){        Intent intent = new Intent(context, ContactDetails.class);        intent.putExtra("contactName", currName);        intent.putExtra("contactPhone", currNumber);        startActivity(intent);    }CustomAdapter.java并调用openContactDetails:    private class ViewHolder{        protected CheckBox checkBox;        private TextView contactName;    }    public View getView(final int position, View convertView, ViewGroup parent){        final ViewHolder holder;        holder.checkBox = (CheckBox) convertView.findViewById(R.id.cb);        holder.contactName = (TextView) convertView.findViewById(R.id.contact_name);        holder.contactName.setOnClickListener(new View.OnClickListener(){            MainActivity test = new MainActivity();            @Override            public void onClick(View v){            //Toast.makeText(context, contactList.get(position).getName() + " selected at " + position, Toast.LENGTH_SHORT).show();            test.openContactDetail(context,contactList.get(position).getName(), contactList.get(position).getNumber());        }    });
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您不应该在 MainActivity 中调用该方法。如果您需要该方法,可以使用接口进行通信。我给你举了一个例子。您必须首先创建一个接口。


public interface ICustomAdapterListener { 

  void openContactDetail(String currName, String currNumber);

}

那么你应该在活动中使用它。


ICustomAdapterListener customAdapterListener = new ICustomAdapterListener() {

    @Override

    public void openContactDetail(String currName, String currNumber) {

        Intent intent = new Intent(context, ContactDetails.class);

        intent.putExtra("contactName", currName);

        intent.putExtra("contactPhone", currNumber);

        startActivity(intent);

    }

};

为了访问活动中定义的接口,我们需要向适配器提供接口对象。


我们可以使用 CustomAdapter 的构造函数来实现这一点。


private ICustomAdapterListener listener;


public CustomAdapter(ICustomAdapterListener listener) {

    this.listener = listener;

}

最后


public View getView(final int position, View convertView, ViewGroup parent){

    final ViewHolder holder;


    holder.checkBox = (CheckBox) convertView.findViewById(R.id.cb);

    holder.contactName = (TextView) convertView.findViewById(R.id.contact_name);


    holder.contactName.setOnClickListener(new View.OnClickListener(){

        @Override

        public void onClick(View v){

        //Toast.makeText(context, contactList.get(position).getName() + " selected at " + position, Toast.LENGTH_SHORT).show();

        if (listener!=nul) {

           listener.openContactDetail(contactList.get(position).getName(), contactList.get(position).getNumber());

        }


    }

});


查看完整回答
反对 回复 2023-10-19
  • 1 回答
  • 0 关注
  • 64 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信