2013-10-04 26 views
0

初學者的Android程序員在這裏,的Android發現意見不在當前視圖

我主要的活動課,我已經設置了內容視圖Home_Screen。在這個Home_Screen xml文件中 - 我有一個ListView。並描述該列表視圖的行,我做了所謂的row_layout另一個自定義XML文件,它看起來像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="48dp" 
     android:layout_height="48dp" 
     android:gravity="left|center_vertical" 
     android:layout_alignParentLeft="true" 
     android:src="@drawable/ic_launcher" > 
    </ImageView> 

    <CheckedTextView 
     android:id="@+id/checkedTextView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:layout_toRightOf="@+id/icon" 
     android:minHeight="?android:attr/listPreferredItemHeight" 
     android:paddingLeft="6dip" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
     android:clickable="true" 
     android:focusable="true" 
     android:textColor="@color/darkish_blue" > 
    </CheckedTextView> 

</RelativeLayout> 

的問題是,我必須使用Android到的CheckedTextView因爲它包含複選框,我需要使用但它給了我一個空指針異常。

CheckedTextView chkBox = (CheckedTextView) findViewById(R.id.checkedTextView); 
chkBox.setOnClickListener(new View.OnClickListener() {//<===== null pointer here!! 
      public void onClick(View v) 
      { 
       ((CheckedTextView) v).toggle(); 
      } 
     }); 

我想我也許能在row_layout文件納入在home_screen列表視圖在那裏可以找到,但我不知道任何幫助會如何...... 理解,謝謝。

+0

發佈你的父母xml和oncreate方法也。它會清除 –

+0

你有一個用於ListView的適配器嗎? –

+0

@Clay你需要忽略除Philio之外的所有答案。您需要有一個適配器,並在創建時爲列表中的每一行獲取CheckedTextView。 –

回答

0

在找到視圖之前,您首先需要充填行佈局的佈局。嘗試類似

View view = getLayoutInflator().inflate(R.layout.row_layout, null); 
ChecedkTextView chkBox = (CheckeTextView) view.findViewById(R.id.checkedTextView); 

之前,沒有與ID R.id.checkedTextView視圖的情況下,您的代碼不能正常工作。

+1

這只是答案的一小部分! – Philio

+0

@bclymer嗨,這擺脫了錯誤,但現在theres另一個,就行了:'CheckedkTextView chkBox =(CheckedTextView)view.findViewById(R.id.checkedTextView);''它說'java.lang.ClassCastException:android .widget.ImageView無法轉換爲android.widget.CheckedTextView'。我不知道發生了什麼,它不是我的xml文件中的ImageView。 – Ogen

+0

這個錯誤非常詳細,你正在查找的圖像實際上是一個'ImageView'的實例,但是你明確地試圖將它轉換爲'CheckedTextView',檢查你的XML以確保你的ID是正確的。 – bclymer

0

您需要擡高新視圖

LayoutInflater myInflater = LayoutInflater.from(yourcontext); 
    RelativeLayout TheLayout = (RelativeLayout) myInflater.inflate(R.layout.row_layout, null); 

那麼你可以得到的觀點

CheckedTextView chkBox = (CheckedTextView) TheLayout.findViewById(R.id.checkedTextView); 

這會做到這一點。

+0

那也行不通,它的說法不能從線性佈局轉換爲textview – Ogen

+0

Bah!我的懶散閱讀 - TheLayout =(RelativeLayout)myInflater.inflate(R.layout.row_layout,null); –

+0

現在說它不能從相對佈局轉換爲textview ...這很愚蠢。 – Ogen

1

您需要使用適配器驅動列表中的內容,這可能是內置於Android中的內容,或者您​​可以創建自己的內容。一般來說,如果您將自定義視圖與遊標以外的任何其他視圖一起用作數據源,則最好使用自己的適配器(從BaseAdapter繼承是一個好的開始)。

在有其創建列表中的每個項目的看法,有人使用類似@bclymer發佈將讓你實現你的自定義視圖和處理事件等

我建議getView()方法的適配器你檢查文檔:http://developer.android.com/guide/topics/ui/layout/listview.html