Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在CustomAdapter类中调用新的intent?_Java_Android_Android Studio_Android Intent - Fatal编程技术网

Java 如何在CustomAdapter类中调用新的intent?

Java 如何在CustomAdapter类中调用新的intent?,java,android,android-studio,android-intent,Java,Android,Android Studio,Android Intent,我是Android Studio的新手,从CustomAdapter类调用新活动时遇到问题。在应用程序中,用户应该单击ListView中的文本并打开一个新的活动,该活动显示联系人各自的详细信息 我有一个名为openContactDetails的方法,它位于MainActivity.java中,它接受参数上下文、字符串currName、字符串currNumber。我在CustomAdapter.java中调用openContactDetails 位于MainActivity.java中的openC

我是Android Studio的新手,从CustomAdapter类调用新活动时遇到问题。在应用程序中,用户应该单击ListView中的文本并打开一个新的活动,该活动显示联系人各自的详细信息

我有一个名为openContactDetails的方法,它位于MainActivity.java中,它接受参数上下文、字符串currName、字符串currNumber。我在CustomAdapter.java中调用openContactDetails

位于MainActivity.java中的openContactDetails:

CustomAdapter.java并调用openContactDetails:

日志:

    10-13 16:54:02.195 10347-10347/com.example.testhw2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.testhw2, PID: 10347
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
    at android.app.Activity.startActivityForResult(Activity.java:3918)
    at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
    at android.app.Activity.startActivityForResult(Activity.java:3877)
    at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
    at android.app.Activity.startActivity(Activity.java:4200)
    at android.app.Activity.startActivity(Activity.java:4168)
    at com.example.testhw2.MainActivity.openContactDetail(MainActivity.java:51)
    at com.example.testhw2.CustomAdapter$2.onClick(CustomAdapter.java:90)
    at android.view.View.performClick(View.java:5198)
    at android.view.View$PerformClick.run(View.java:21147)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

不应在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());
        }

    }
});

不应在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());
        }

    }
});
寻找这篇文章。寻找这篇文章。