2013-06-26 2 views
2

я имею в моем коде есть ListView и когда я пытаюсь нажать на пункт у меня есть NullPointerException на (*) < - см код:ListView OnClickListener не начинает деятельность

public class Fragment2 extends ListFragment { 
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); 
// 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 <item> 
    for (int i = 0; i < nl.getLength(); i++) { 
     // creating new HashMap 
     HashMap<String, String> map = new HashMap<String, String>(); 
     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:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical"> 
<!-- Main ListView 
    Always give id value as list(@android:id/list) 
--> 
<ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:choiceMode="singleChoice" 
     android:clickable="true" 
     android:longClickable="true" 
     android:focusable="false" 
     android:focusableInTouchMode="false"/> 
</LinearLayout> 

list_item.xml

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <!-- Name Label --> 
    <TextView 
     android:id="@+id/not" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="#dc6800" 
     android:textSize="16sp" 
     android:textStyle="bold" 
     android:paddingTop="6dip" 
     android:paddingBottom="2dip" /> 
    <!-- Description label --> 
    <TextView 
     android:id="@+id/testo" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="#acacac" 
     android:paddingBottom="2dip"> 
    </TextView> 
    <!-- Linear layout for cost and price Cost: Rs.100 --> 


    </LinearLayout> 

Что я могу сделать? я не нашли решение по интернету ... кто поможет: D

+0

просто замените getActivity() с помощью этого ключевого слова .. – Riser

+0

Что вы подразумеваете под 'does not start activity'? Получаете ли вы onItemClick() или нет? – sandrstar

+1

Класс @Segi не расширяет активность, а фрагмент списка. 'getActivtiy' прав. – Raghunandan

ответ

0

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

Объявление menuItems как класс Переменная.

public class Fragment2 extends ListFragment { 
    ArrayList<HashMap<String, String>> menuItems ; 
    .... 
    } 

then Override 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

ok теперь, когда я нажимаю, у меня есть java.lang.NullPointerException на com.example.appfragment.Fragment2.onListItemClick (Fragment2.java:101): String key = menuItems.get (position). получить (KEY_NOT) .ToString(); String test = menuItems.get (position) .get (KEY_TESTO) .toString(); – user2493360

+0

опубликовать обновленный код, отредактировав свой вопрос. – Raghunandan

+0

@ user2493360 комментарий этих двух строк проверяет, переходит ли он к следующему действию. если так, то получение строки из списка hahsmap равно null. – Raghunandan

0

Вы установили не кликабельны

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

И вы пытаетесь нажать на элемент, он не может работать.

+0

Если у меня проблема, у меня такая же проблема ... не запускайте действие ... он получает вход, но ничего не делает ... – user2493360

0

Вы сделали две ошибки:

  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

, но если я ставлю Fragment2.this, он даст мне ошибку, потому что это не основное действие. и я попробовал setClickable (true), но не работает ... когда я нажимаю на него, не начинайте ничего – user2493360

+0

Вместо 'getActivity()', поместите 'getApplicationContext()' ... Это будет работать. См. Мой отредактированный ответ ... –

+0

Не удается разрешить метод getApplicationContext() ... – user2493360

0

попробовать этот

Intent in = new Intent(getActivity().getApplicationContext(), ImageGridActivity.class); 
+0

ничего лишнего ... – user2493360