2013-04-23 111 views
0

我嘗試使用CustomAdapter創建一個簡單的ListView,但ListView不顯示任何元素。我試圖改變背景顏色,並改變了正確的...所以這不是ListView誰不顯示,但我認爲的元素。Android,我的自定義ListView的元素不可見

任何幫助將是不錯,我搜索了幾個小時什麼問題...

有我的代碼:

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" 
    tools:context=".MainActivity" > 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" > 
    </ListView> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/lblNFC" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/lblNFC_text" /> 

     <!-- Read Only --> 

     <EditText 
      android:id="@+id/editTextNFC" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:clickable="false" 
      android:cursorVisible="false" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:hint="Click scan to search NFC" 
      android:inputType="none" /> 

     <Button 
      android:id="@+id/btnFindNFC" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onClick="ButtonOnClick" 
      android:text="@string/btnFindNFC_text" /> 
    </LinearLayout> 

</LinearLayout> 

list_item_var.xml

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

     <TextView 
      android:id="@+id/var" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:textSize="18dp" 
      android:textStyle="bold" 
      android:typeface="serif" > 

      </TextView> 

      <TextView 
       android:id="@+id/value" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:textSize="18dp" 
       android:textStyle="bold" 
       android:typeface="serif" > 
      </TextView> 

    </LinearLayout> 

CustomAdapter.java

public class CustomAdapter extends BaseAdapter { 

    private ArrayList<VarDetails> _data; 
    Context _c; 

    CustomAdapter(ArrayList<VarDetails> data, Context c) { 
     _data = data; 
     _c = c; 
    } 

    public int getCount() { 
     // TODO Auto-generated method stub 
     return _data.size(); 
    } 

    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return _data.get(position); 
    } 

    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) _c 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.list_item_var, null); 
     } 

     TextView varView = (TextView) v.findViewById(R.id.var); 
     TextView valueView = (TextView) v.findViewById(R.id.value); 

     VarDetails var = _data.get(position); 
     varView.setText(var.var); 
     valueView.setText("Value: " + var.value); 

     return v; 
    } 

} 

VarActivity.java

public class VarActivity extends Activity { 
    ListView varList; 
    ArrayList<VarDetails> details; 
    AdapterView.AdapterContextMenuInfo info; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     varList = (ListView) findViewById(R.id.list); 

     details = new ArrayList<VarDetails>(); 

     VarDetails Detail; 

     Detail = new VarDetails(); 
     Detail.setVar("Var1"); 
     Detail.setValue("Value1"); 
     details.add(Detail); 

     Detail = new VarDetails(); 
     Detail.setVar("Var2"); 
     Detail.setValue("Value2"); 
     details.add(Detail); 

     Detail = new VarDetails(); 
     Detail.setVar("Var3"); 
     Detail.setValue("Value3"); 
     details.add(Detail); 

     varList.setAdapter(new CustomAdapter(details, this)); 
    } 
} 

VarDetails.java

public class VarDetails { 

    String var; 
    String value; 

    public String getVar() { 
     return var; 
    } 

    public void setVar(String var) { 
     this.var = var; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

} 
+0

我覺得你的ArrayList'_data'爲空,因爲你還沒有實例化。當你將'match parent'設置爲'listView'的高度時會發生什麼? – Pragnani 2013-04-23 18:03:05

+0

why android:layout_height =「0dip」? – 2013-04-23 18:16:10

+0

如果我將Match_parent設置爲高度,eclipse只是警告我,0dp對性能更好。 但ListView不顯示以及... – 2013-04-23 18:43:05

回答

0

不知怎的,你應該綁定VarDetail與您的自定義適配器內的佈局元素的數據

v = vi.inflate(R.layout.list_item_var, null); 

你可以嘗試例如

TextView varView = (TextView) v.findViewById(R.id.var); 
varView.setText(_data.get(position).getVar()); 
+0

Thx爲您的幫助,我試着你說什麼,但listView的元素仍然不顯示... – 2013-04-23 18:44:45

0

某處有問題,在您的list_item_var.xml的LinearLayout。方向是水平的,所有的子文本視圖都有layout_width =「match_parent」,所以文本視圖會被推出視圖,因爲第一個視圖已經在所有寬度空間上展開。嘗試將它們設置爲「wrap_content」。如果你的textview具有不同的比例,還要設置layout_weight。

+0

謝謝,但它並沒有改變任何東西.. 。:( – 2013-04-23 18:57:25

+0

好吧,不能保證他們會工作,但請嘗試以下建議: 1)在getView()中刪除中間變量「v」。直接使用convertView並返回convertView。 2)在你的getView()中將vi.inflate(R.layout.list_item_var,null)更改爲inflater.inflate(R.layout.list_item_var,parent,false) – Neoh 2013-04-24 05:36:14

+0

另外,將你的字符串var和value聲明爲public,或者使用方法getVar()和getValue()來檢索它們的值,而不是var.var – Neoh 2013-04-24 05:43:49

0

變化list_item_var.xml

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

<TextView 
    android:id="@+id/var" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:textSize="18dp" 
    android:textStyle="bold" 
    android:typeface="serif" > 
</TextView> 

<TextView 
    android:id="@+id/value" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:textSize="18dp" 
    android:textStyle="bold" 
    android:typeface="serif" > 
</TextView> 

</LinearLayout>