首页 文章

我如何使用intent从listview转到下一个活动? [重复]

提问于
浏览
-1

这个问题在这里已有答案:

我已经使用自定义适配器创建了listview,以将我的图像和文本加载到listview中 . 接下来我要做的是在点击listview项目后使用intent加载下一个活动 . 但是,一旦我点击它,应用程序崩溃 . 知道我的错误在哪里?

主活动中的代码,直到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 of crash

** 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 . 在Android.app.Activity.startActivityForResult(Activity.java:4430)的android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)下的v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)位于android.app.Activity.startActivity(Activity.java:4759)的android.app.Activity.startActivity(Activity.java:4791)上的.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720) . wong.desmond.singaporeplacesofinterest.SingaporePlacesofInterest $ 2.onItemClick(SingaporePlacesofInterest.java:106)at android.widget.AdapterView.performItemClick(AdapterView.java:318)at android.widget.AbsListView.performItemClick(AbsListView.java:1165)at android . widget.AbsListView $ PERFO rmClick.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.View.St.EvatchTransformedTouchEvent(ViewGroup.java:2961)的android.view.View.View.StartEvent(ViewGroup.java:2636)上的android.view.ViewGroup.DispatchTransformedTouchEvent(ViewGroup.java:2955)在Android.view上的android.view.View.View.View.St上的android.view.View.View.StartEvent(ViewGroup.java:2650)上的android.view.ViewGroup . 位于android.view.View.View.St上的android.view.View.St.EvatchTventEvent(ViewGroup.java:2961)上的android.view.View.St.EvatchTouchEvent(ViewGroup.java:2961)的ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961) .java:2650)在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGrou p.java:2961)在android.view.View.St.EvatchTventEvent(ViewGroup.java:2650)的android.view.View.View.St上的android.view.View.View.St.EvatchTouchEvent(ViewGroup.java:2961) )com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:445)at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1828)at android.app.Activity.dispatchTouchEvent(Activity . java:3292)在android.view.View.dispatchPointerEvent的com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:407)的android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68) (View.java:11964)android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4776)at android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:4590)at android.view.ViewRootImpl $ InputStage . 在android.view.ViewRootImpl上传递(ViewRootImpl.java:4128)$ InputStage.onDeliverT oNext(ViewRootImpl.java:4181)在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:4147)android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:4274)at android.view.ViewRootImpl $ InputStage .apply(ViewRootImpl.java:4155)在android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:4331)android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:4128)at android.view.ViewRootImpl $在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:4155)的android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:4147)的InputStage.onDeliverToNext(ViewRootImpl.java:4181)在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:关闭VM 02-02 16:42:23.974 3934-3934 / com.wong.desmond.singaporeplacesofinterest E / AndroidRuntime:FATAL EXCEPTION: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.R4.ult.VathmentActivity.startActivityForResult(FragmentActivity.java:67)的android.app.A活动时,我在android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java)的android.app.Activity.startActivityForResult(Activity.java:4430) :720)在android.app.Activity.startActivity(Activity.java:4791)的android.app.Activity.startActivity(Activity.java:4759)at com.wong.desmond.singaporeplacesofinterest.SingaporePlacesofInterest $ 2.onItemClick(SingaporePlacesofInterest.java) :106)android.widget.Ab上的android.widget.AdapterView.performItemClick(AdapterView.java:318)android.widget.AbsListView $ AbsClickView.java:3134上的android.widget.AbsListView.performItemClick(AbsListView.java:1165)在Android.widget.AbsListView.onTouchUp(AbsListView.java:4061)android.view上的android.view.View.DatListView.onTouchEvent(AbsListView.java:3820)android.view.View.dispatchTouchEvent(View.java:11725) . android.view.ViewGroup.dispatchTouc上的ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2955)位于android.view.View.View.StartEvent(ViewGroup.java:2650)的android.view.ViewGroup.DispatchTransformedTouchEvent(ViewGroup.java:2661)的android.view.ViewGroup.DispatchTransformedTouchEvent(ViewGroup.java)中的hEvent(ViewGroup.java:2636) :2961)在android.view.View.ViewGroup上的android.view.View.ViewGroup.DispatchTransformedTouchEvent(ViewGroup.java:2961)上的android.view.View.DvatchTouchEvent(ViewGroup.java:2650) .view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)位于android.view.View集团的android.view.View.ViewGroup上的android.view.View.ViewGroup上的android.view.View.ViewGroup.DispatchTransformedTouchEvent(ViewGroup.java:2961) . dispatchTouchEvent(ViewGroup.java:2650)at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)at com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:445)com.android.internal.polic y.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1828)位于android.app.Activity.dispatchTouchEvent(Activity.java:3292),位于com.android的android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)在android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4776)的android.view.policy.DecorView.dispatchTouchEvent(DecorView.java:407)位于android.view.View.dispatchPointerEvent(View.java:11964) . 在Android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:4181)的android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:4128)中查看.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:4590) .view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:4147)at android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:4274)at android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:4155)at at android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:4331)在android.v iew.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:4128)在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:4181)at android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:4147)at android .view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:4155)02-02 16:42:23.975 3934-3934 / com.wong.desmond.singaporeplacesofinterest E / AndroidRuntime:at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl .java:4128)在Android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6677)的android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6616)上的android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6642)在Android.os.MessageQueue的android.view.MessageQueue.nativePollOnce(Native Method)的android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)上的android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6745) .next(MessageQueue.java:325)在android.os.Looper.loop(Looper.java:142)atandroid.app.ActivityThread.main(ActivityThread.java:6541)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

2 回答

  • 0

    确保在清单中声明新活动

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

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

    <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”是活动的包 .

    希望这对你有用 .

相关问题