我如何使用意图从列表视图转到下一个活动? [复制]

Posted

技术标签:

【中文标题】我如何使用意图从列表视图转到下一个活动? [复制]【英文标题】:How do i use intent to go to next activity from listview? [duplicate] 【发布时间】:2018-07-13 01:06:51 【问题描述】:

我创建了带有自定义适配器的列表视图,以将我的图像和文本加载到列表视图中。我想做的下一件事是在单击列表视图项目后使用意图加载下一个活动。但是,一旦我单击它,该应用程序就会崩溃。知道我的错误在哪里吗?

在 onItemClickListener 按预期工作之前,主要活动中的代码。一旦我点击了这些项目,我就用吐司测试了这个。但是,一旦我应用了意图,应用程序就会崩溃并且无法继续进行下一个活动。

MainActivity.java如下

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class SingaporePlacesofInterest extends AppCompatActivity 

ListView lv;
SearchView sv;

private int[] images = new int[]
        R.drawable.us,
        R.drawable.gardens,
        R.drawable.mbs,
        R.drawable.ns,
        R.drawable.orchard,
        R.drawable.riversafari,
        R.drawable.rws,
        R.drawable.singaporeflyer;

private String[] names = new String[]
        "Universal Studios",
        "Gardens by The Bay",
        "Marina Bay Sands",
        "Night Safari",
        "Orchard Road",
        "River Safari",
        "Resorts World Sentosa",
        "Singapore Flyer";

private String[] type = new String[]
        "Excitement",
        "Sightseeing",
        "Excitement",
        "Night Life",
        "Shopping",
        "Sightseeing",
        "Excitement",
        "Sightseeing";


@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_singapore_places_of_interest);

    lv=(ListView) findViewById(R.id.listView1);
    sv=(SearchView) findViewById(R.id.searchView1);

    final Adapter adapter=new Adapter(this, getPOI());
    lv.setAdapter(adapter);

    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() 

        @Override
        public boolean onQueryTextSubmit(String arg0) 
            // TODO Auto-generated method stub
            return false;
        

        @Override
        public boolean onQueryTextChange(String query) 
            // TODO Auto-generated method stub

            adapter.getFilter().filter(query);

            return false;
        
    );

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() 
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int selected, long id) 

            /*Toast.makeText(getApplicationContext(),"Test",Toast.LENGTH_LONG).show();*/

           Intent intent = new Intent(getApplicationContext(),DisplayPOI.class);


            intent.putExtra("poi", names);
            intent.putExtra("images", images);
            intent.putExtra("type", type);*/
            startActivity(intent);

        
    );




public ArrayList<POI> getPOI()

    ArrayList<POI> POIS = new ArrayList<POI>();
    POI p;

    for(int i=0;i<names.length;i++)
    
        p = new POI(type[i], names[i], images[i]);
        POIS.add(p);

    

    return POIS;


DisplayPOI.java如下

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class DisplayPOI extends AppCompatActivity 

TextView tv;
ImageView img;
String names [];

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_poi);

    /*to retrieve the intent*/

    Intent intent = getIntent();
    names = intent.getStringArrayExtra("poi");

    tv = (TextView) findViewById(R.id.textView);

     tv.setText("This is a " + names);
    Toast.makeText(getApplicationContext(),"Test",Toast.LENGTH_LONG).show();



崩溃的Logcat

** 02-02 16:42:23.899 3934-3934/com.wong.desmond.singaporeplacesofinterest E/InputEventReceiver:异常调度输入事件。 02-02 16:42:23.900 3934-3934/com.wong.desmond.singaporeplacesofinterest E/MessageQueue-JNI:MessageQueue 回调中的异常:handleReceiveCallback 02-02 16:42:23.950 3934-3934/com.wong.desmond.singaporeplacesofinterest E/MessageQueue-JNI:android.content.ActivityNotFoundException:找不到明确的活动类 com.wong.desmond.singaporeplacesofinterest/com.wong。 desmond.singaporeplacesofinterest.DisplayPOI;您是否在 AndroidManifest.xml 中声明了此活动? 在 android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1932) 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1615) 在 android.app.Activity.startActivityForResult(Activity.java:4472) 在 android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67) 在 android.app.Activity.startActivityForResult(Activity.java:4430) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720) 在 android.app.Activity.startActivity(Activity.java:4791) 在 android.app.Activity.startActivity(Activity.java:4759) 在 com.wong.desmond.singaporeplacesofinterest.SingaporePlacesofInterest$2.onItemClick(SingaporePlacesofInterest.java:106) 在 android.widget.AdapterView.performItemClick(AdapterView.java:318) 在 android.widget.AbsListView.performItemClick(AbsListView.java:1165) 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:3134) 在 android.widget.AbsListView.onTouchUp(AbsListView.java:4061) 在 android.widget.AbsListView.onTouchEvent(AbsListView.java:3820) 在 android.view.View.dispatchTouchEvent(View.java:11725) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2955) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2636) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:445) 在 com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1828) 在 android.app.Activity.dispatchTouchEvent(Activity.java:3292) 在 android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68) 在 com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:407) 在 android.view.View.dispatchPointerEvent(View.java:11964) 在 android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4776) 在 android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4590) 在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128) 在 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181) 在 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147) 在 android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4274) 在 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4155) 在 android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4331) 在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128) 在 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181) 在 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147) 在 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4155) 在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128) 在 android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6 02-02 16:42:23.951 3934-3934/com.wong.desmond.singaporeplacesofinterest D/AndroidRuntime: 关闭虚拟机 02-02 16:42:23.974 3934-3934/com.wong.desmond.singaporeplacesofinterest E/AndroidRuntime: 致命例外: main 进程:com.wong.desmond.singaporeplacesofinterest,PID:3934 android.content.ActivityNotFoundException:无法找到显式活动类 com.wong.desmond.singaporeplacesofinterest/com.wong.desmond.singaporeplacesofinterest.DisplayPOI;您是否在 AndroidManifest.xml 中声明了此活动? 在 android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1932) 在 android.app.Instrumentation.execStartActivity(Instrumentation.java:1615) 在 android.app.Activity.startActivityForResult(Activity.java:4472) 在 android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67) 在 android.app.Activity.startActivityForResult(Activity.java:4430) 在 android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720) 在 android.app.Activity.startActivity(Activity.java:4791) 在 android.app.Activity.startActivity(Activity.java:4759) 在 com.wong.desmond.singaporeplacesofinterest.SingaporePlacesofInterest$2.onItemClick(SingaporePlacesofInterest.java:106) 在 android.widget.AdapterView.performItemClick(AdapterView.java:318) 在 android.widget.AbsListView.performItemClick(AbsListView.java:1165) 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:3134) 在 android.widget.AbsListView.onTouchUp(AbsListView.java:4061) 在 android.widget.AbsListView.onTouchEvent(AbsListView.java:3820) 在 android.view.View.dispatchTouchEvent(View.java:11725) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2955) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2636) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650) 在 com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:445) 在 com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1828) 在 android.app.Activity.dispatchTouchEvent(Activity.java:3292) 在 android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68) 在 com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:407) 在 android.view.View.dispatchPointerEvent(View.java:11964) 在 android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4776) 在 android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4590) 在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128) 在 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181) 在 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147) 在 android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4274) 在 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4155) 在 android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4331) 在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128) 在 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181) 在 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147) 在 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4155) 02-02 16:42:23.975 3934-3934/com.wong.desmond.singaporeplacesofinterest E/AndroidRuntime: 在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128) 在 android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6642) 在 android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6616) 在 android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6577) 在 android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6745) 在 android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 在 android.os.MessageQueue.nativePollOnce(本机方法) 在 android.os.MessageQueue.next(MessageQueue.java:325) 在 android.os.Looper.loop(Looper.java:142) 在 android.app.ActivityThread.main(ActivityThread.java:6541) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

【问题讨论】:

您遇到的错误是什么? 请@DWing logcat。还要避免使用应用程序上下文来防止内存泄漏。 添加显示崩溃的logcat,以便我们为您提供帮助 已经在logcat中添加了。谢谢大家 【参考方案1】:

确保在清单中声明新活动

    <activity android:name=".DisplayPOI"></activity>

【讨论】:

已经尝试过您的建议。但它仍然无法加载。无论如何感谢您的建议。 来自 logcat 的问题是 Unable to find explicit Activity class DisplayPOI,Ali 已共享此修复程序。如果您可以分享新的 logcat,请。 你说得对,阿里和坦尼!感谢您的帮助。 @DWing 你能投票给答案吗,在别人看到问题时帮助他们……祝你有美好的一天【参考方案2】:

在清单文件中,像这样定义活动:

<application
    ...
    ...
    ...
    <activity
        android:name="<activity name with full package name>"/*ex. 
com.example.android.MainActivty*/
        android:label="@string/app_name">
    </activity>
</application>

像这样从 Activity 调用 Intent:

Intent intent= new Intent(this,Receiver_class_name.class);
startActivity(intent);

将“Receiver_class_name”替换为活动名称。

请记住,要使此功能起作用,两个活动必须在同一个包中,否则您必须在完整包中提及活动名称。

例子:

Intent intent=new Intent(this,com.example.android.custom.MainActivity2.class);
startActivity(intent);

这里,“com.example.android.custom”是activity的包。

希望这对你有用。

【讨论】:

谢谢 Birju!完美运行。

以上是关于我如何使用意图从列表视图转到下一个活动? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将活动之间的数据从列表视图传递到另一个活动

使用意图从另一个片段调用一个片段

Android 错误从通知转到片段

从联系人意图添加联系人后如何刷新列表视图?

将多个项目添加到列表视图,每个项目从按钮单击的另一个意图接收

从 ListView 开始活动,然后是下一个活动