Переход от одного действия ListView к другому действию ListView

#android #android-intent #android-listview #nullpointerexception

#Android #android-намерение #android-listview #исключение nullpointerexception

Вопрос:

Я использую ListView в Android, создав этот класс

 public class HBSListView extends ListActivity;
  

Когда я нажимаю на элемент в списке и хочу перейти к следующему ListActivity , показывая относительную информацию о выбранном элементе в предыдущем списке.

 lv.setOnItemClickListener( new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
        @SuppressWarnings("unchecked")
        HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);                   

        Intent a = new Intent(iTeam.Ufinder.Application.HBS.HBSDetailView.class.getName()); 
        a.putExtra("store_id", o.get("id")); 
        startActivity(a); 

        // When I use above code it is not working. I want to pass ID also.

        // This works but i do not know how to pass ID this way.
        // startActivity(new Intent("iTeam.Ufinder.Application.HBSDETAILVIEW"));
    }
});
  

public class HBSDetailView extends ListActivity это класс, в который я хочу перейти.

Файл Mainfest

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="iTeam.Ufinder.Application"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Startup"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     <activity android:name=".main"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="iTeam.Ufinder.Application.CLEARSCREEN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:name="iTeam.Ufinder.Application.MANAGEMENT.Management"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="iTeam.Ufinder.Application.MANAGEMENT" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:name="iTeam.Ufinder.Application.HBS.HBSListView"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="iTeam.Ufinder.Application.HBSLISTVIEW" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:name="iTeam.Ufinder.Application.HBS.HBSDetailView"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="iTeam.Ufinder.Application.HBSDETAILVIEW" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

</application>
<uses-permission android:name="android.permission.INTERNET" />
  

Это Exception :

04-15 13:04:43.901: ОШИБКА / AndroidRuntime (1417): исключение java.lang.RuntimeException: не удается создать экземпляр activity ComponentInfo{iTeam.Ufinder.Приложение / iTeam.Ufinder.Application.HBS.HBSDetailView}: java.lang.Исключение NullPointerException

Комментарии:

1. когда я запускаю свой проект, написав этот код, он генерирует ошибку и принудительно закрывает приложение. Намерение a = новое намерение (iTeam. Ufinder. Application.HBS.HBSDetailView.class.getName()); a.putExtra(«store_id», o.get(«id»)); startActivity(a); но когда я использую этот способ для перехода к новому ListActivity, это работает, но в этом случае я не могу получить идентификатор выбранного элемента списка на последнем экране! мне нужны некоторые методы для перехода к следующему действию списка с идентификатором выбранного элемента списка в текущем действии списка.

2. Посмотрите в logcat, должно быть исключение с stacktrace, если вы получаете принудительное закрытие.

3. Хорошо, я получил это исключение, не позволяющее создать экземпляр activity. и это исключение нулевой точки.

Ответ №1:

Когда вы создаете намерение, подобное этому

 Intent a = new Intent(iTeam.Ufinder.Application.HBS.HBSDetailView.class.getName()); 
  

вы создаете его с именем действия вашего класса. Вам нужно создать намерение, подобное этому:

 Intent a = new Intent(HBSListView.this, iTeam.Ufinder.Application.HBS.HBSDetailView.class); 
  

Разница заключается в подписи вызова. Первое имеет один аргумент типа String . Это означает создание Intent с указанным действием. Второе касается аргументов Context и Class . Это для создания Intent вызова указанного класса в указанном контексте.

Также проверьте, что o не равно null.

Редактировать

Что ж, если вы хотите начать действие таким образом…

 Intent a = new Intent("iTeam.Ufinder.Application.HBSDETAILVIEW");
a.putExtra("store_id", o.get("id")); 
startActivity(a); 
  

Приведенный выше код должен работать так, как вы ожидаете….

Комментарии:

1. Намерение конструктора (новый AdapterView. OnItemClickListener(){}, класс<HBSDetailView>) не определен.

2. О, я ошибаюсь… не this при первом аргументе. Используйте NameOfYourCurrectActivity.this

3. Я новичок в разработке Android, и у меня нет сильных знаний о Intent (); Это генерирует ошибку java, если я использую способ, который вы предлагаете.

4. Тем не менее, это создает исключение во время выполнения, которое не может создать экземпляр activity. Намерение intent = новое намерение (HBSListView.this, iTeam. Ufinder. Application.HBS.HBSDetailView.class ); startActivity (намерение); На данный момент я просто хочу запустить свое новое действие list, которое, если я сделаю это таким образом, я смогу запустить startActivity (новое намерение («iTeam. Ufinder. Приложение. HBSDETAILVIEW»)); Но таким образом я могу передать идентификатор выбранного элемента списка.

5. Нет, это не работает, то же исключение. Это проблема расширения активности / ListActivity? Потому что я расширяю ListActivity. общедоступный класс HBSDetailView расширяет ListActivity { } Это должно сработать: ( Мне нужно больше знаний!

Ответ №2:

 Bundle bundle = new Bundle();
ListAdapter adapter = (new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list1));
list.setAdapter(adapter);

list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View v,int position, long id) {
        HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);

        if (position == 0) {
            bundle.putString("store_id", o.get("id"));
            Intent inten = new Intent("Activity name which is you must define in manifest file"); 
            inten.putExtras(bundle);

            startActivity(inten);
        }

        if(position==1) {
            //write your code for when second item of listview clicked
        }

        .....

    }
});
  

Добавьте свой Activity в файл манифеста:

 <activity
    android:name=".className"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="com.test.ACTIVITY" />
        //use this name when you want to run this activty

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
  

Комментарии:

1. Я думаю, это то, что вы хотите добавить в свой класс listview