Android之ListView<2>

       在ListView<1>中,简单的实现了List的效果,但是有很大弊病,UI界面是与用户交互的直接窗口,显然,list模板是一个单一的TextView过于单调,如果,这个模板我们可以集合android的UI组件自行设计,效果就会很好。

        在这个例子中,新建了一个XML文件show.xml,专门用来设置list的每一条目显示的模板,在本例中,只是ImageView和TextView的结合,当然还可以有更复杂的,用ImageView,TextView,Button等等组件以RelativeLayout的布局可以创建出我们喜欢的list模板。

        在activity_main.xml中创建一个标签,<ListView>,这样在MainActivity.java中拿到这个ListView,然后加入适配器,那么显示的内容就会显示在activity_main的ListView的位置,所以在activity_main的布局中我们可以让ListView放在一个合适的位置。

        在本例中有一个比较重要的地方,在MyAdapter中的getView方法中如何将我们创建的show.xml表现的布局作为ListView的显示形式,代码如下:

View view = View.inflate(MainActivity.this, R.layout.show, null);

 这一行代码可以看出它的作用是拿到show.xml模板的view,在前面的讲过将xml文件实例化为view对象,有三种形式,代码如下:

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
View layout = inflater.inflate(R.layout.main, null);  


LayoutInflater inflater = LayoutInflater.from(context);  
View layout = inflater.inflate(R.layout.main, null);  
   

LayoutInflater inflater = getLayoutInflater();  
View layout = inflater.inflate(R.layout.main, null);  

 其实这三种形式的源码都是一样的,看view的inflate函数的源码:

/**
     * Inflate a view from an XML resource.  This convenience method wraps the {@link
     * LayoutInflater} class, which provides a full range of options for view inflation.
     *
     * @param context The Context object for your activity or application.
     * @param resource The resource ID to inflate
     * @param root A view group that will be the parent.  Used to properly inflate the
     * layout_* parameters.
     * @see LayoutInflater
     */
    public static View inflate(Context context, int resource, ViewGroup root) {
        LayoutInflater factory = LayoutInflater.from(context);
        return factory.inflate(resource, root);
    }

 

public class MainActivity extends Activity {

	private ListView listView;
	private int i=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        listView = (ListView)findViewById(R.id.list);
        listView.setAdapter(new MyAdapter());
    }

    private class MyAdapter extends BaseAdapter{

		@Override
		public int getCount() {
			return 50;
		}

		@Override
		public Object getItem(int arg0) {
			return null;
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			
			View view = View.inflate(MainActivity.this, R.layout.show, null);
			
			ImageView image = (ImageView)view.findViewById(R.id.image);
			image.setImageResource(R.drawable.win);
			TextView textView = (TextView)view.findViewById(R.id.textView);
			textView.setTextSize(20);
			textView.setText("More effort,more fournate" + i++);
			return view;
		}
    }
    
}

 

 

猜你喜欢

转载自aarongo.iteye.com/blog/1918385