Android Exercise2问题总结

本文介绍了Android开发中自定义Adapter的方法,包括继承ArrayAdapter与BaseAdapter的区别及应用场景,并详细展示了如何通过监听触屏事件实现滑动切换Activity的功能。
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。

 
  3.图标大小控制
   由于Item的图标都是从网上下载的,所以每个图标的大小都不一样,如果直接用match_parent或者wrap_content的话效果非常差,图标大小不一的,经过查找资料,我发现图标大小是可以自己设置的,具体代码如下,写在xml布局文件中就可以用了。

<ImageView
        android:id="@+id/item_image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:scaleType="fitXY"
        />


   4.category的问题
    注意最后一行的"android.intent.category.DEFAULT",除了app的入口Activity,其它的Activity都要加这个category,因为Intent在隐式调用的时候会自己加上这一套,所以被调用的活动都要有这个属性,不然就没办法被调用到。

 <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>


5.permission的问题
    作业给活动添加了permission,这个很简单。

 <activity
            android:name="es.source.code.activity.MainScreen" 
            android:permission="scos.permission.ACCESSSCOS">

    但是要注意,访问这个工程内的活动的时候就要给工程加上permission才能访问这个活动。

<permission android:name="scos.permission.ACCESSSCOS"
        android:protectionLevel="dangerous"        />

   

6.制作TestSCOS
作业要求制作一个TestSCOS,我开始以为是直接在SCOS工程里面加一个测试,但是我发现这样的话不是一个单独的APP,没法直接点击运行。
后来我就单独写了一个APP,用隐式Intent的方式跳转过去。
但是运行的时候有问题,总是跳转不过去,找了很久,最后我终于找到问题所在,就是一个permission的问题。

<uses-permission android:name="scos.permission.ACCESSSCOS"/>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值