这个问题在这里已有答案:
我已经使用自定义适配器创建了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 回答
确保在清单中声明新活动
在清单文件中,定义这样的活动:
从Activity调用Intent,如下所示:
将“Receiver_class_name”替换为活动名称 .
请记住,要使其工作,两个活动必须在同一个包中,否则您必须提及完整包的活动名称 .
例:
这里,“com.example.android.custom”是活动的包 .
希望这对你有用 .