繁体   English   中英

如何在扩展 ArrayAdapter 的自定义 Listadapter 中启动意图

[英]How to start intent inside custom Listadapter which extends ArrayAdapter

我想开始一项新活动,向某个号码发送短信。 我已经尝试过此代码,但我的活动崩溃了。 我得到 null NullPointerException。 指导我如何善意地开始新的活动。 我还在清单文件中添加了短信权限

  public class ListAdapter extends ArrayAdapter<ParseUser> {
private  Context context;
public ListAdapter(Context context, int resource, List<ParseUser> user1) {
    super(context, resource, user1);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi;
        vi = LayoutInflater.from(getContext());
        v = vi.inflate(R.layout.list_item_layout, null);
    }

    final ParseUser p = (ParseUser) getItem(position);

    if(p!=null){
        TextView username = (TextView)v.findViewById(R.id.username);
        TextView bloodType = (TextView)v.findViewById(R.id.bloodtype);
        //TextView longitude = (TextView)v.findViewById(R.id.longitude);
        //TextView latitude = (TextView)v.findViewById(R.id.latitude);
        //TextView mobile = (TextView)v.findViewById(R.id.mobile);
        Button msgButton = (Button)v.findViewById(R.id.message_me);
        final String number = p.getString("Mobile");

        if(username!=null){
            username.setText(p.getString("Name"));
        }
        if(bloodType!=null){
            bloodType.setText(p.getString("Bloodtype"));
        }

        msgButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent a = new Intent(getContext(),SmsActivity.class);
                a.putExtra("number",number);
                context.startActivity(a);

            }
        });
    }



    return v;
}
}

你能代替这个吗

  public void onClick(View v) {
                Intent a = new Intent(this.ListAdapter ,SmsActivity.class);
 Intent a = new Intent(getContext(),SmsActivity.class);

改成

 Intent a = new Intent(context,SmsActivity.class);

问题在这里: context.startActivity(a); . 您正在使用context字段,但从未分配过它。 您可以在构造函数中分配它:

public ListAdapter(Context context, int resource, List<ParseUser> user1) {
    super(context, resource, user1);
    this.context = context;
}

或者你可以使用getContext()而不是contextgetContext().startActivity(a); . 在这种情况下,您完全不需要context字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM