遇到问题在GridView的定义放在使用之后,造成了空指针的异常
注意:ImageSwitcher的setFactory方法返回一个imageview对象,之后我们直接对switcher操作就行
Activity的代码如下
package com.phone.hty.myapplication;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageSwitcher;
import android.widget.ViewSwitcher;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private ImageSwitcher mImageSwitcher;
private GridView mGridView;
private LayoutInflater mLayoutInflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initListener();
}
private void initListener() {
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println("您点击了"+position);
mImageSwitcher.setImageResource(R.drawable.avatars01);
}
});
}
private void initData() {
TypedArray typedArray = getResources().obtainTypedArray(R.array.image);
mImageSwitcher = (ImageSwitcher) findViewById(R.id.image_switcher);
mGridView = (GridView) findViewById(R.id.gridView);
mLayoutInflater = LayoutInflater.from(this);
int[] images = new int[typedArray.length()];
for (int i = 0;i<typedArray.length();i++){
images[i] = typedArray.getResourceId(i,0);
}
ArrayList<Bean> list = new ArrayList<Bean>();
for (int i = 0;i<typedArray.length();i++){
Bean bean = new Bean("测试文本"+i,images[i]);
list.add(bean);
}
mGridView.setAdapter(new MyAdapter(this,list));
mImageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
return mLayoutInflater.inflate(R.layout.image_view, null);
}
});
}
}
Adapter的代码如下
package com.phone.hty.myapplication;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
/**
* 作者:司马啸尘
* 创建日期:2016/3/26
* 描述:
*/
public class MyAdapter extends BaseAdapter {
Context mContext;
ArrayList<Bean> mList;
public MyAdapter(Context context, ArrayList<Bean> list) {
mContext = context;
mList = list;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder holder;
if (convertView == null) {
convertView = View.inflate(mContext, R.layout.grid_view, null);
holder = new viewHolder();
holder.mImageView = (ImageView) convertView.findViewById(R.id.grid_image_view);
holder.mTextView = (TextView) convertView.findViewById(R.id.grid_text_view);
convertView.setTag(holder);
} else {
holder = (viewHolder) convertView.getTag();
}
holder.mTextView.setText(mList.get(position).getDesc());
holder.mImageView.setImageResource(mList.get(position).getImage());
return convertView;
}
}
class viewHolder {
public ImageView mImageView;
public TextView mTextView;
}
总结:BaseAdapter的缓存使用还是不熟练,今天忘了
还有就是在java代码中把xml布局变成view对象是的用法
- 定义LayoutInflater对象
- 对他赋值 mLayoutInflater = LayoutInflater.from(this)传入上下文参数
- 对xml文件解析mLayoutInflater.inflate(R.layout.image_view, null)