2010-09-06 109 views
0

我需要列表視圖中的一個小幫助。我正在生成一個列表視圖,但每當我做getChildAt(int position)它會拋出NullPointerException。Android listView:空指針異常

下面是代碼

_list=(ListView)findViewById(android.R.id.list); 

_loadListElements(); 

_showListUI(); 

_list.getChildAt(1).setBackgroundColor(Color.WHITE); 
+0

logcat說什麼? – Bevor 2010-09-06 13:11:52

+0

寫入行後只有空指針異常 – viv 2010-09-06 13:13:07

+0

將代碼分成多行。所以我們可以看到_list是否爲null,或者getChildAt(1)是否返回null。 – bramp 2010-09-06 13:13:12

回答

1

如果沒有超過一個子元素,那麼一個一定會給你一個NullPointerException,你必須開始在prgramming從零向上計數。所以你可能想試試這個。

_list.getChildAt(0).setBackgroundColor(Color.WHITE); 

但沒有更多的代碼和錯誤堆棧的logcat提取,很難說。

+0

kkkkkk我會嘗試從日誌貓身上粘貼更多的細節,目前我不在我的工作場所。我想要的是在列表視圖中查看單行。單擊列表項時返回的相同視圖????? – viv 2010-09-06 15:55:38

1

不知道你試圖實現什麼功能,我不確定這些建議中的任何一個是否相關。

而不是使用list.getChildAt(),您可以設置您使用的任何適配器的getView()方法的背景顏色?你會有看法,但我不知道你是否有數據尚未知道哪一個改變背景。

從您的一條評論中,您聽起來似乎希望獲得任何列表項目被點擊的視圖。 ListActivity.onListItemClick()中提供的視圖「v」看起來應該是您希望使用的視圖。

希望這兩個幫助之一。

+0

雅,我最初只在getView()中做過,但沒有給出預期的結果。它設置了多於一行的背景。所以我想在列表創建後跳到特定行的視圖。例如,在列表創建後,爲列表視圖的第4行的背景着色。我仍然試圖如果我會得到一些解決方案,我會在這裏發佈.....感謝您的答覆 – viv 2010-09-07 06:02:49

0

得到它的工作............. 在getView(),它之所以沒有更早根據我的是工作是,

對於一個條件檢查。例如:如果(條件匹配)改變顏色;

時使用列表更新自己......這是造成問題

因此,正確的是:如果(條件)做​​某事]其他[恢復到原始狀態]

這是因爲我沒有其他說法我得到了問題。

1

我曾經在OnListItemClickListener()中試過,但失敗了。最後,我對自定義的適配器進行了一些修改,以便使用listview。在getView()中,我將clickListener應用於我經常添加到列表中的項目。 n在那裏做所有必需的功能。這裏是我的代碼,我在列表n中添加圖像視圖,因此在imageview上應用偵聽器。

getChildAt(i)拋出異常,因爲它只對可見項-1有效。所以它不起作用。

我認爲它會幫助那些想在特定列表項目被選中時改變顏色的人。去吧..

在getView()的定製適配器 // ----------------------------- ---- code ------------------------------------------

LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View rowView = inflater.inflate(R.layout.icon_image_layout, parent, false); ImageView imageView = (ImageView) rowView.findViewById(R.id.Icon_ImageView); imageView.setClickable(true); final int pos=position; imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub // TODO Auto-generated method stub try{ if(previous_view!=null) previous_view.setBackgroundColor(Color.WHITE); }catch (Exception e) { System.out.println("Exception Occurs Previous View"); } v.setBackgroundColor(Color.RED); MainActivity.imageView.setImageResource(MainActivity.Image_Name[pos]); previous_view=v; return false; } });