Exercises 2
1.Adapter
开始我用的是第一行代码上的ItemAdapter,直接继承ArrayAdapter的,后来根据课上老师的介绍,我直接使用了CustomAdapter继承BaseAdapter.
这个是继承ArrayAdapter的,还添加了一个Item类
public class ItemAdapter extends ArrayAdapter<Item>{
private int resourceId;
public ItemAdapter(Context context,int textViewresourceId,List<Item>objects) {
super(context,textViewresourceId,objects);
resourceId = textViewresourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Item item = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
ImageView itemImage = (ImageView) view.findViewById(R.id.item_image);
TextView itemName = (TextView) view.findViewById(R.id.item_name);
itemImage.setImageResource(item.getImageId());
itemName.setText(item.getName());
return view;
}
}
这个是继承BaseAdapter的
class CustomAdapter extends BaseAdapter {
Context context;
LayoutInflater layoutInflater;
CustomAdapter(Context context, LayoutInflater layoutInflater) {
this.context = context;
this.layoutInflater = layoutInflater;
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.itemlayout, null);
viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.item_image);
viewHolder.textView = (TextView) convertView.findViewById(R.id.item_name);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.imageView.setImageResource((int) listData.get(i).get("image"));
viewHolder.textView.setText((String) listData.get(i).get("text"));
return convertView;
}
class ViewHolder {
ImageView imageView;
TextView textView;
}
}
}
可以看到继承BaseAdapter多复写了好几个方法。
2.滑动设置
这个我百度了挺久的,网上说的一个什么gesture的,我搞了半天也没弄明白什么意思,最后用了一个最直接的做法。
if (event.getAction() == MotionEvent.ACTION_DOWN) {
x1 = event.getX();
y1 = event.getY();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
x2 = event.getX();
y2 = event.getY();
if ((x1 - x2) > 50) {
/**
* 显式intent
*/
// Intent intent = new Intent(SCOSEntry.this,MainScreen.class);
/**
* 隐式intent
*/
Intent intent = new Intent();
intent.setAction("scos.intent.action.SCOSMAIN");
intent.addCategory("scos.intent.category.SCOSLAUNCHER");
intent.putExtra("extra_data", "FromEntry");
startActivity(intent);
// Toast.makeText(SCOSEntry.this, "left", Toast.LENGTH_SHORT).show();
}
}
这段代码的意思非常直接,就是当有按下动作的时候记录坐标,当有抬起动作时再次记录坐标,然后两个坐标相减,如果超过一定值,就进行跳转动作。跳转到下个Activity。
由于Item的图标都是从网上下载的,所以每个图标的大小都不一样,如果直接用match_parent或者wrap_content的话效果非常差,图标大小不一的,经过查找资料,我发现图标大小是可以自己设置的,具体代码如下,写在xml布局文件中就可以用了。
<ImageView
android:id="@+id/item_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="fitXY"
/>
注意最后一行的"android.intent.category.DEFAULT",除了app的入口Activity,其它的Activity都要加这个category,因为Intent在隐式调用的时候会自己加上这一套,所以被调用的活动都要有这个属性,不然就没办法被调用到。
5.permission的问题
<intent-filter>
<action android:name="scos.intent.action.SCOSMAIN"/>
<category android:name="scos.intent.category.SCOSLAUNCHER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
作业给活动添加了permission,这个很简单。
<activity
android:name="es.source.code.activity.MainScreen"
android:permission="scos.permission.ACCESSSCOS">
但是要注意,访问这个工程内的活动的时候就要给工程加上permission才能访问这个活动。
<permission android:name="scos.permission.ACCESSSCOS"
android:protectionLevel="dangerous" />
作业要求制作一个TestSCOS,我开始以为是直接在SCOS工程里面加一个测试,但是我发现这样的话不是一个单独的APP,没法直接点击运行。
后来我就单独写了一个APP,用隐式Intent的方式跳转过去。
但是运行的时候有问题,总是跳转不过去,找了很久,最后我终于找到问题所在,就是一个permission的问题。
<uses-permission android:name="scos.permission.ACCESSSCOS"/>
本文介绍了Android开发中自定义Adapter的方法,包括继承ArrayAdapter与BaseAdapter的区别及应用场景,并详细展示了如何通过监听触屏事件实现滑动切换Activity的功能。
613

被折叠的 条评论
为什么被折叠?



