ListView OnClickListener не починає активність

i have in my code a ListView and when i try to click on item i have a NullPointerException on (*)<-- see the code:

public class Fragment2 extends ListFragment {
ArrayList> menuItems = new ArrayList>();
// All static variables
static final String URL = "http://www.testtesttest.netsons.org/Rullino.xml";
// xml node keys
static final String KEY_ITEM = "item";
static final String KEY_ID = "ID";
static final String KEY_NOT = "not";
static final String KEY_TESTO = "testo";// parent node
ListView list;


public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);




    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(URL);//getting XML
    Document doc = parser.getDomElement(xml);//getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_ITEM);
   //looping through all item nodes 
    for (int i = 0; i < nl.getLength(); i++) {
       //creating new HashMap
        HashMap map = new HashMap();
        Element e = (Element) nl.item(i);
       //adding each child node to HashMap key => value
        map.put(KEY_ID, parser.getValue(e, KEY_ID));
        map.put(KEY_NOT, parser.getValue(e, KEY_NOT));
        map.put(KEY_TESTO, parser.getValue(e, KEY_TESTO));

       //adding HashList to ArrayList
        menuItems.add(map);
    }

   //Adding menuItems to ListView
    ListAdapter adapter = new SimpleAdapter(getActivity(), menuItems,R.layout.list_item,new String[] { KEY_NOT, KEY_TESTO }, new int[] {R.id.not, R.id.testo });

    setListAdapter(adapter);
    View V =inflater.inflate(R.layout.ac_fragment2,null);
    list=(ListView)V.findViewById(android.R.id.list);

   //Getting adapter by passing xml data ArrayList


   //selecting single ListView item
   //listening to single listitem click
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                               int position, long id) {
           //getting values from selected ListItem
          /*  String not = ((TextView) view.findViewById(R.id.not)).getText().toString();
            String testo = ((TextView) view.findViewById(R.id.testo)).getText().toString();


           //Starting new intent
            Intent in = new Intent(getActivity().getApplicationContext(), ImageGridActivity.class);
            in.putExtra(KEY_NOT, not);
            in.putExtra(KEY_TESTO, testo);
            getActivity().startActivity(in);
*/            }

    });
    return inflater.inflate(R.layout.ac_fragment2, container, false);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    Log.i("FragmentList", "Item clicked: " + id);

    Intent in = new Intent(getActivity(), ImageGridActivity.class);
    String key = menuItems.get(position).get(KEY_NOT).toString();
    String test = menuItems.get(position).get(KEY_TESTO).toString();
    in.putExtra(KEY_NOT, key); (*)
    in.putExtra(KEY_TESTO, test); (*)
    getActivity().startActivity(in);

}

}

і це код xml:


<!-- Main ListView
     Always give id value as list(@android:id/list)
-->

 

list_item.xml


    <!-- Name Label -->
    
    <!-- Description label -->
    
    
    <!-- Linear layout for cost and price Cost: Rs.100 -->


    

Що я можу зробити? Я не знайшов рішення в інтернеті ... Будь-яка допомога: D

2
просто замініть getActivity() на це ключове слово ..
додано Автор Riser, джерело
@Raghunandan upppss ... Я не бачив це ..
додано Автор Riser, джерело
@Raghunandan upppss ... Я не бачив це ..
додано Автор Riser, джерело
@ Segi class не розширює активність, але фрагмент списку. getActivtiy правильно.
додано Автор Raghunandan, джерело
@ Segi class не розширює активність, але фрагмент списку. getActivtiy правильно.
додано Автор Raghunandan, джерело
Що ви маєте на увазі під "does not start activity"? Ви отримуєте onItemClick() чи ні?
додано Автор sandrstar, джерело
і ваша проблема дійсно є ...?
додано Автор pskink, джерело
і ваша проблема дійсно є ...?
додано Автор pskink, джерело
опублікуйте свій макет.list_item.xml
додано Автор pskink, джерело
опублікуйте свій макет.list_item.xml
додано Автор pskink, джерело
getActivity (). getApplicationContext() знову нічого ... і я ненавиджу це!
додано Автор user2493360, джерело
getActivity (). getApplicationContext() знову нічого ... і я ненавиджу це!
додано Автор user2493360, джерело
getActivity (). getApplicationContext() знову нічого ... і я ненавиджу це!
додано Автор user2493360, джерело

7 Відповіді

Ви зробили дві помилки:

  1. list.setClickable (false);
  2. Intent in = new Intent (getActivity (), ImageGridActivity.class);

Змініть ці два рядки, як показано нижче:

list.setClickable(true);//or you can remove this line as you have set android:clickable="true" in xml layout
Intent in = new Intent(getApplicationContext(), ImageGridActivity.class);
0
додано
Замість getActivity() , помістіть getApplicationContext() ... Це буде працювати. Будь ласка, перегляньте мій відредагований відповідь ...
додано Автор Avadhani Y, джерело
Це не вирішено, оскільки ваш клас не розширює Діяльність .
додано Автор Avadhani Y, джерело
@ user2493360 спробуйте цей getActivity (). startActivity (in) .
додано Автор Raghunandan, джерело
@ user2493360 спробуйте мою відповідь.
додано Автор Raghunandan, джерело
@ user2493360 спробуйте відповісти і дайте мені знати, якщо ви зіткнулися з будь-якими труднощами.
додано Автор Raghunandan, джерело
його метод перевизначення має бути всередині вашого класу ListFragment . так, помістіть його нижче onCreateView .
додано Автор Raghunandan, джерело
Добре, тепер, коли я натискаю, у мене є java.lang.NullPointerException на при ком. Приклад: Приклад: .toString (); String test = menuItems.get (позиція) .get (KEY_TESTO) .toString ();
додано Автор user2493360, джерело
Я намагаюсь зараз ... я повинен поставити override в кінці oncreateView?
додано Автор user2493360, джерело
але я не можу розширювати активність, тому що мені потрібно ListFragment тут, так що є якесь рішення? @ Рагхунандан нічого ..
додано Автор user2493360, джерело
але якщо я поклав Fragment2.this це дає мені помилку, тому що це не основна діяльність. і я спробував setClickable (true), але не працює ... коли я натискаю на неї, не починайте що-небудь
додано Автор user2493360, джерело
Неможливо вирішити метод getApplicationContext() ...
додано Автор user2493360, джерело

Ви зробили дві помилки:

  1. list.setClickable (false);
  2. Intent in = new Intent (getActivity (), ImageGridActivity.class);

Змініть ці два рядки, як показано нижче:

list.setClickable(true);//or you can remove this line as you have set android:clickable="true" in xml layout
Intent in = new Intent(getApplicationContext(), ImageGridActivity.class);
0
додано
Замість getActivity() , помістіть getApplicationContext() ... Це буде працювати. Будь ласка, перегляньте мій відредагований відповідь ...
додано Автор Avadhani Y, джерело
Це не вирішено, оскільки ваш клас не розширює Діяльність .
додано Автор Avadhani Y, джерело
@ user2493360 спробуйте цей getActivity (). startActivity (in) .
додано Автор Raghunandan, джерело
@ user2493360 спробуйте мою відповідь.
додано Автор Raghunandan, джерело
@ user2493360 спробуйте відповісти і дайте мені знати, якщо ви зіткнулися з будь-якими труднощами.
додано Автор Raghunandan, джерело
його метод перевизначення має бути всередині вашого класу ListFragment . так, помістіть його нижче onCreateView .
додано Автор Raghunandan, джерело
Добре, тепер, коли я натискаю, у мене є java.lang.NullPointerException на при ком. Приклад: Приклад: .toString (); String test = menuItems.get (позиція) .get (KEY_TESTO) .toString ();
додано Автор user2493360, джерело
Я намагаюсь зараз ... я повинен поставити override в кінці oncreateView?
додано Автор user2493360, джерело
Неможливо вирішити метод getApplicationContext() ...
додано Автор user2493360, джерело
але я не можу розширювати активність, тому що мені потрібно ListFragment тут, так що є якесь рішення? @ Рагхунандан нічого ..
додано Автор user2493360, джерело
але якщо я поклав Fragment2.this це дає мені помилку, тому що це не основна діяльність. і я спробував setClickable (true), але не працює ... коли я натискаю на неї, не починайте що-небудь
додано Автор user2493360, джерело

Вам потрібно переопределити onListItemClick .

Оголосити menuItems як клас Variable.

   public class Fragment2 extends ListFragment {
   ArrayList> menuItems ;
   ....  
   }

Потім замініть onListItemClick .

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
     Log.i("FragmentList", "Item clicked: " + id);

            Intent in = new Intent(getActivity(), ImageGridActivity.class);
            String key = menuItems.get(position).get(KEY_NOT).toString();
            String test = menuItems.get(position).get(KEY_TEST0).toString();
            in.putExtra("key1", key);
            in.putExtra("key2", test);
            getActivity().startActivity(in);

 }

Примітка: ключі повинні збігатися

Отримати в ImageGridActivity .

    Bundle extras = getIntent().getExtras();
    if(extras!=null)
    {
        String value1 = extras.getString("key1");
        String value2 = extras.getString("key2");
    }
0
додано
опублікуйте оновлений код, відредагувавши своє запитання.
додано Автор Raghunandan, джерело
@ user2493360 коментар цих двох рядків перевіряє, чи він переходить до наступної діяльності. якщо так, то ваше отримання рядка зі списку hahsmap є нульовим.
додано Автор Raghunandan, джерело
@ user2493360 коментувати та перевірити, чи він переходить до наступної діяльності
додано Автор Raghunandan, джерело
@ user2493360 дякую, і якщо він допомагає вам оновити мою відповідь, натиснувши на неї.
додано Автор Raghunandan, джерело
ПРОБЛЕМА ВИРІШЕНА!!! ти найкращий!! : D
додано Автор user2493360, джерело
оновлення коду, але нова проблема ...
додано Автор user2493360, джерело
Добре, тепер, коли я натискаю, у мене є java.lang.NullPointerException на при ком. Приклад: Приклад: .toString (); String test = menuItems.get (позиція) .get (KEY_TESTO) .toString ();
додано Автор user2493360, джерело

Ви встановили, що не можна натискати

list.setClickable(false);
   //Getting adapter by passing xml data ArrayList

І ви намагаєтеся натиснути на елемент, це не може працювати.

0
додано
Якщо я знімаю таку ж проблему ... не запускаю активність ... вона отримує вхід, але не робить нічого ...
додано Автор user2493360, джерело

Ви встановили, що не можна натискати

list.setClickable(false);
   //Getting adapter by passing xml data ArrayList

І ви намагаєтеся натиснути на елемент, це не може працювати.

0
додано
Якщо я знімаю таку ж проблему ... не запускаю активність ... вона отримує вхід, але не робить нічого ...
додано Автор user2493360, джерело

Ви встановили, що не можна натискати

list.setClickable(false);
   //Getting adapter by passing xml data ArrayList

І ви намагаєтеся натиснути на елемент, це не може працювати.

0
додано
Якщо я знімаю таку ж проблему ... не запускаю активність ... вона отримує вхід, але не робить нічого ...
додано Автор user2493360, джерело

спробуйте це

Intent in = new Intent(getActivity().getApplicationContext(), ImageGridActivity.class);
0
додано
нічого знову ...
додано Автор user2493360, джерело
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.