2013-06-26 69 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

你是什麼意思'不開始活動'?你是否收到onItemClick()或不? – sandrstar

+1

@Segi類不擴展活動,但是列表片段。 'getActivtiy'是對的。 – Raghunandan

回答

0

您需要覆寫onListItemClick

聲明menuItems作爲類變量。

public class Fragment2 extends ListFragment { 
    ArrayList<HashMap<String, String>> 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

現在確定當我點擊我有一個java.lang.NullPointerException at 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列表中獲取字符串爲空。 – 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