2013-01-16 73 views
0

如何为已创建的列表视图(以下代码)实现getView()(如何创建getview())。这样我可以改变的TextView项的字体和其它属性stylig如何为列表视图实现getview()

MainActivity.java

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

ListView listView1 = (ListView) findViewById(R.id.listView1); 

String[] items = { "some", "fancy", "items", "to", "show" }; 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      R.layout.listitem, items); 

listView1.setAdapter(adapter); 
} 

activity_main.xml中

<RelativeLayout 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" 
tools:context=".MainActivity" > 

<ListView 
    android:id="@+id/listView1" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" /> 

</RelativeLayout> 

listview.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:textSize="20sp" 
android:padding="22dp" 
android:gravity="center_horizontal" 
/> 

改变MainActivity.java

public class MainActivity extends Activity { 
    Context context; 
    ArrayAdapter<String> adapter; 
    String[] items = { "some", "fance", "rock", "shot", "trance" }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ListView listView1 = (ListView) findViewById(R.id.listView1); 




    adapter = new ArrayAdapter<String>(this, 
       R.layout.genre_list, items); 

    listView1.setAdapter(adapter);} 
    public View getView(int position, View convertView, ViewGroup parent) { 

    View row; 

    if (null == convertView) { 
     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    row = mInflater.inflate(R.layout.genre_list, null); 

    } else { 

    row = convertView; 

    } 

    TextView tv = (TextView)row.findViewById(android.R.id.title); 
    Typeface font = Typeface.createFromAsset(getAssets(),"roboto.ttf"); 
    Toast.makeText(getApplicationContext(), "font fetched!", 
     Toast.L ENGTH_LONG).show(); 
    tv.setText(items[position]); 
    tv.setTypeface(font); 
    return row; 

    } 

回答

0

getView()是在适配器类的方法,像ArrayAdapter和SimpleCursorAdapter。您必须扩展适配器类,在您的情况ArrayAdapter,以访问getView()

这是Android领先程序员Romain Guy的Google Talk讨论了详细扩展适配器的最佳实践。


这就是说,你可以更改字体和许多其他风格通过XML属性,你不一定需要创建一个自定义的适配器。

+0

查一下我的编辑更改MainActivity.java这不工作,我不认为getView被称为 – user1979237

+0

不,它不是被称为:但你可以通过只覆盖默认getView方法做到这一点。你必须**写一个自定义适配器来使用'getView()'。请观看上面的视频,它描述了如何做你想做的事情,我没有理由在这里重复它的内容。该视频还表明,您尝试使用的方法可以通过ViewHolders等方式加以改进。 – Sam

0

为TextView的更改字体,您将需要创建自定义ArrayAdapter。

Typeface font = Typeface.createFromAsset(getAssets(), 
           "yourfontname.ttf"); 

listView1.setListAdapter(new 
       ArrayAdapter<string>(this,R.layout.listitem, items) { 

@Override 

public View getView(int position, View convertView, 
             ViewGroup parent) { 

View row; 

if (null == convertView) { 

row = mInflater.inflate(R.layout.listitem, null); 

} else { 

row = convertView; 

} 

TextView tv = (TextView)row.findViewById(android.R.id.text1); 

tv.setText(items[position]); 
tv.setTypeface(font); 
return row; 

} 

}); 
+0

我在我的oncreate()中使用了上面的getview()方法,它告诉我删除@override annoatio,所以我做了那么它显示了我的标记“”“方法getItem(int)未定义类型MainActivity”“创建方法getItem(int)......在这行tv.setText(getItem(position)); – user1979237

+0

@ user1979237:看我的编辑答案 –

+0

字体不会改变我不认为getView()被称为! – user1979237

相关问题