2013-11-02 3 views
0

Я новичок в android. Я хочу создать пользовательский элемент списка listview. Я следил за некоторыми учебниками, но мой эмулятор ничего не показывает для Custom ListView. Может ли кто-нибудь помочь мне выяснить, где не так с моим кодом? Заранее спасибо.My Custom ListView ничего не отображает

Вот мой custom_listview_main.xml

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

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/customListView" /> 

    </LinearLayout> 

Это мой custom_listview_row.xml

<?xml version="1.0" encoding="utf-8"?> 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center_vertical" 
      android:minHeight="64dp"> 

    <!-- <ImageView 
     android:id="@+id/clv_imageView" 
     android:layout_width="32dp" 
     android:layout_height="32dp" 
     android:contentDescription="@string/empty" 
     android:layout_alignParentLeft="true" 
     android:layout_marginLeft="9dp" 
     android:layout_alignParentTop="true"/> --> 

    <TextView 
    android:id="@+id/clv_textView2" 
    android:layout_width="97dp" 
    android:layout_height="32dp" 
    android:layout_alignParentRight="true" 
    android:gravity="center_vertical" 
    android:text="@string/tv_definition" 
    android:textIsSelectable="true" /> 

    <TextView 
    android:id="@+id/clv_textView" 
    android:layout_width="97dp" 
    android:layout_height="32dp" 
    android:layout_alignParentLeft="true" 
    android:gravity="center_vertical" 
    android:text="@string/tv_word" 
    android:textIsSelectable="true" /> 

    </RelativeLayout> 

Вот мой MyPerformanceArrayAdapter.java

import java.util.List; 

    import android.app.Activity; 
    import android.content.Context; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.ArrayAdapter; 
    import android.widget.TextView; 

    public class MyPerformanceArrayAdapter extends ArrayAdapter<DefinitionObject>{ 
    private List<DefinitionObject> entries; 
    private Activity activity; 

    public MyPerformanceArrayAdapter(Activity a, int textViewResourceId,   List<DefinitionObject> entries) { 
    super(a, textViewResourceId, entries); 
    this.entries = entries; 
    this.activity = a; 
    } 

    public static class ViewHolder{ 
    public TextView item1; 
    public TextView item2; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    ViewHolder holder; 
    if (v == null) { 
     LayoutInflater vi = 
      (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.custom_listview_row, null); 
     holder = new ViewHolder(); 
     holder.item1 = (TextView) v.findViewById(R.id.clv_textView); 
     holder.item2 = (TextView) v.findViewById(R.id.clv_textView2); 
     v.setTag(holder); 
    } 
    else 
     holder=(ViewHolder)v.getTag(); 

    final DefinitionObject custom = entries.get(position); 
    if (custom != null) { 
     holder.item1.setText(custom.getWord()); 
     holder.item2.setText(custom.getFav()); 
    } 
    return v; 
    } 

    } 

и, наконец, это моя активность под названием TempCLV.java

package com.example.myidictionary; 

    import java.util.List; 

    import android.app.Activity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.widget.ListView; 

    public class TempCLV extends Activity { 

private MySQLiteDefinitionHelper db; 
String tblName = ""; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.custom_listview_main); 

    Intent msjIntent = getIntent(); 
    tblName = msjIntent.getStringExtra(WordDefinitionHomeActivity.TABLENAME2); 

    } 

    public void refresh() 
    { 
    db = new MySQLiteDefinitionHelper(this); 
    final List<DefinitionObject> values = db.getAllWords(tblName); 

    ListView mylist = (ListView)findViewById(R.id.customListView); 
    MyPerformanceArrayAdapter adapter = new MyPerformanceArrayAdapter(this, R.id.customListView, values); 
    mylist.setAdapter(adapter); 
    } 
    } 
+1

вы уверены, что значения содержит что-то? – Blackbelt

+0

@blackbelt refresh - где он устанавливает адаптер, я не вижу, чтобы его вызывали где угодно, и вы можете быть прав насчет значений, содержащих некоторые данные. – Raghunandan

+0

'refresh' не вызывается .. –

ответ

2

Вам необходимо позвонить refresh в onCreate, так как вы устанавливаете адаптер для просмотра списка.

Убедитесь, что ваш values имеет некоторые данные

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.custom_listview_main); 
Intent msjIntent = getIntent(); 
tblName = msjIntent.getStringExtra(WordDefinitionHomeActivity.TABLENAME2); 
refresh(); 
} 

Также вы можете переместить инициализацию Inflater в конструктор класса адаптера. Нет необходимости инициализировать в getView

LayoutInflater vi; 
public MyPerformanceArrayAdapter(Activity a, int textViewResourceId,List<DefinitionObject> entries) { 
super(a, textViewResourceId, entries); 
this.entries = entries; 
vi =(LayoutInflater)a.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
+0

спасибо, сэр. Я забыл и вообще не понял, какую функцию вызывать не вызывали. -__-» –

0

Пожалуйста, вызовите метод обновления по крайней мере, на первый раз, чтобы установить уровень адаптера в вашем MainActivity»onCreate метод ..

Смежные вопросы