Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 ANDROID:从两个不同的活动(不同的目的)开始相同的活动_Java_Android_Android Intent_Android Activity - Fatal编程技术网

Java ANDROID:从两个不同的活动(不同的目的)开始相同的活动

Java ANDROID:从两个不同的活动(不同的目的)开始相同的活动,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,我有一个小问题:我有3项活动。活动ListClass.java public class ListClass extends Activity { ...... listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view,

我有一个小问题:我有3项活动。活动ListClass.java

public class ListClass extends Activity {

......


listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            onItemClick1(parent, view, position, id);

        }

    });

}

public void onItemClick1(AdapterView<?> parent, View view, int position,
        long id) {

    String name = (String) parent.getItemAtPosition(position);
    String address = (String) listAddress.get(position);
    int status = (int) listStatus.get(position);
    double lat = (double) listLat.get(position);
    double lng = (double) listLng.get(position);
    String serialNumber = (String) listSerialNumber.get(position);

    getIntent().putExtra("name", name);
    getIntent().putExtra("address", address);
    getIntent().putExtra("status", status);
    getIntent().putExtra("latitude", lat);
    getIntent().putExtra("longitude", lng);
    getIntent().putExtra("serialNumber", serialNumber);

    startActivity(getIntent());

}

public Intent getIntent() {
    Intent intent = new Intent(ListClass.this, ClassB.class);
    return intent;
}
到目前为止还不错!但是我需要从另一个活动MainClass.java启动ActivityB

    Intent intent = new Intent(MainActivity.this,
                    ClassB.class);

            startActivity(intent);
问题是当ClassB使用
Bundle=getIntent().getExtras()时他找不到“附加”,因为MainClass的意图和ListClass的意图不同!我该怎么办??我可以决定使用哪一个吗?谢谢你

编辑: @skygeek好的,我正在处理它,但是如果额外的值发生变化,我如何创建一个静态变量呢

public void onItemClick1(AdapterView<?> parent, View view, int position,
        long id) {

    String name = (String) parent.getItemAtPosition(position);
    String address = (String) listAddress.get(position);
    int status = (int) listStatus.get(position);
    double lat = (double) listLat.get(position);
    double lng = (double) listLng.get(position);
    String serialNumber = (String) listSerialNumber.get(position);

    Intent intent = new Intent(ListClass.this, ChargeBoxInfoActivity.class);
    intent.putExtra("name", name);
    intent.putExtra("address", address);
    intent.putExtra("status", status);
    intent.putExtra("latitude", lat);
    intent.putExtra("longitude", lng);
    intent.putExtra("serialNumber", serialNumber);
    startActivity(intent);
}
public void/mclick1(适配器视图父视图、视图视图、int位置、,
长id){
字符串名称=(字符串)parent.getItemAtPosition(位置);
字符串地址=(字符串)listAddress.get(位置);
int status=(int)listStatus.get(position);
double lat=(double)listLat.get(位置);
double lng=(double)listLng.get(position);
String serialNumber=(String)listSerialNumber.get(位置);
意向意向=新意向(ListClass.this、ChargeBoxInfoActivity.class);
意向。额外(“名称”,名称);
意向。额外(“地址”,地址);
意向。额外(“状态”,状态);
意向。额外(“纬度”,纬度);
意向。额外(“经度”,液化天然气);
intent.putExtra(“serialNumber”,serialNumber);
星触觉(意向);
}

在第一次调用活动时创建一个具有静态字段意图的静态对象(检查其是否为null)。因此,下次从另一个类调用同一个活动时,请使用这个具有已设置意图的静态对象再次调用该活动,因此您将找到这些额外的对象

在ClassB的onCreate方法中进行检查

     if(getIntent().getExtras() != null)
     {
     // do your functionality with extras
        Bundle bundle = getIntent().getExtras();
        String name = bundle.getString("name");
        String address = bundle.getString("address");
        int status = bundle.getInt("status");
        textViewTitle.setText(name);
        textViewInfo.setText(address + " " + status);
     }

     else
      {
       // do whatever you want to do
      }
这是错误的:

getIntent().putExtra("name", name);
getIntent().putExtra("address", address);
getIntent().putExtra("status", status);
getIntent().putExtra("latitude", lat);
getIntent().putExtra("longitude", lng);
getIntent().putExtra("serialNumber", serialNumber);
startActivity(getIntent());
}

}

在每次函数调用getIntent()后创建新的intent。。。 试试这个:

Intent intent = new Intent(ListClass.this, ClassB.class);
intent.putExtra("name", name);
intent.putExtra("address", address);
intent.putExtra("status", status);
intent.putExtra("latitude", lat);
intent.putExtra("longitude", lng);
intent.putExtra("serialNumber", serialNumber);
startActivity(intent);

我明白。。。试试这个:

try{
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
    String address = bundle.getString("address");
    int status = bundle.getInt("status");
    textViewTitle.setText(name);
    textViewInfo.setText(address + " " + status);
}}catch (Exception ignored) {
}

谢谢你的回答:)实际上我尝试过这个解决方案,但是Eclipse说“空指针异常”。你能给我举个例子吗?再次感谢@Pikkio尝试按照我的建议发布您尝试过的代码,我一定会尽力帮助您!!!!不要使用静态对象调用活动,因为这会导致潜在的内存泄漏。查看一篇关于避免内存泄漏的文章,谢谢你的回答!我尝试了这个解决方案,但问题是无论捆绑包是否为null,我都希望使用ListCLass的意图。所以我不知道在“其他情况下”该怎么办。有什么想法吗?但是在你发送之前你怎么能使用listclass意图呢?我不知道。我认为当您调用getIntent()方法时,它会得到启动ClassB的活动的意图。因此,如果我从ListClass启动ClassB,我没有问题,但是如果我从MainClass启动,应用程序会崩溃。我有点困惑…你的应用程序崩溃了,因为当你从list类开始时,你在extras中发送了一些值,但当你从Main Activity启动classB时,你没有发送任何extras,这就是为什么你需要进行上述检查并编写代码,用于获取extras如果blockok,我知道了。但是如果getIntent().getExtras==null(所以第二个复选框是else),我如何从ListClass调用extras呢。额外的值仅在ListClass中,因为它们是ArrayList的一部分。如果我不理解,很抱歉,但我是初学者。好的!我做到了,但问题仍然存在。当我从ListCLass启动ClassB时,没有问题,但如果我尝试从MainActivity启动,应用程序将崩溃。问题是mainClass的目标没有额外的值。它不起作用。我真的担心我解决不了这个问题。
Intent intent = new Intent(ListClass.this, ClassB.class);
intent.putExtra("name", name);
intent.putExtra("address", address);
intent.putExtra("status", status);
intent.putExtra("latitude", lat);
intent.putExtra("longitude", lng);
intent.putExtra("serialNumber", serialNumber);
startActivity(intent);
try{
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
    String address = bundle.getString("address");
    int status = bundle.getInt("status");
    textViewTitle.setText(name);
    textViewInfo.setText(address + " " + status);
}}catch (Exception ignored) {
}