gpt4 book ai didi

java - 如何在 CustomAdapter 类中调用新 Intent ?

转载 作者:行者123 更新时间:2023-11-29 04:06:25 25 4
gpt4 key购买 nike

我是 Android Studios 的新手,我无法从我的 CustomAdapter 类中调用新 Activity 。在该应用中,用户应该单击 ListView 中的文本并打开一个显示联系人各自详细信息的新 Activity 。

我有一个名为 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());

}
});

日志:

    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 中的方法。如果你需要那个方法,你可以使用一个接口(interface)来通信。我为你做了一个例子。您必须先创建一个界面。

public interface ICustomAdapterListener { 
void openContactDetail(String currName, String currNumber);
}

那么你应该在 Activity 中使用它。

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);
}
};

为了访问 Activity 中定义的接口(interface),我们需要将接口(interface)对象提供给适配器。

我们可以为此使用 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());
}

}
});

关于java - 如何在 CustomAdapter 类中调用新 Intent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58367860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com