www.999yzc.comandroid如何实现类似ide代码补全的下拉列表?

( www.999yzc.com )

如图是AIDE的界面
我的大体思路就是listview和SimpleAdapter,但是不知道listview边框如何实现,而且如何根据光标位置,和内容多少调整框的大小。
我自己的Demo用edittext实现了一个带行号和相应语言的自动机,token获取没有问题。
如下图(CSharp)。

要在手机上写代码吗?PopupWindow应该能满足你的需求吧。listview背景可以弄一个圆角shape

我是大肠的搬运工,

listView 边框 :http://www.cnblogs.com/hanyonglu/archive/2012/03/18/2404820.html
EditText 补全1: http://wangqinghua123.iteye.com/blog/1168738
补全2: http://www.devstore.cn/code/info/454.html


Ps. 造这种车子。。意义不大啊少年。

(看完/读完)这篇文章有何感想! www.999yzc.com的分享…

999yzc亚洲城在线娱乐城Tablayout的tab没有自动回弹功能,第一次快速滑动之后才有回弹..

( 999yzc亚洲城在线娱乐城 )

  1. 描述你的问题

这是模仿今日头条练习的,但是布局出现问题如下:

下面的bottom是用四个Fragment切换的,FragmentTransaction.replace切换的。顶部呢,是call这个Fragment的布局呢是TabLayout和ViewPager的,这几个tab也是用4个Fragment适配的…。感觉就是Fragment上加载fragment…

现在的问题是当从其他三个bottom的图标切换到call这一页的时候,第一,第二个没有回弹效果,也不加载textview,如图,到第三个就正常了…

比如,当Tab1正常下面还有个textview显示,当从call点击到其他三个任意一个,然后再回到call,这时候,tab1的textview不见了,tab1到tab2没有回弹效果,你滑多少就是多少…到滑到tab3就正常了

你觉得这问题是什么?或者说那个今日头条是怎样布局的?

  1. 贴上相关代码

代码太多,弄一点上来

底部fragment的写在mainActivity中

@Override
    protected void onCreateBundle savedInstanceState {
        super.onCreatesavedInstanceState;
        setContentViewR.layout.activity_main;

        initView;
        setDefaultFragment;
    }

    private void setDefaultFragment {

        FragmentManager manager = getSupportFragmentManager;
        FragmentTransaction transaction = manager.beginTransaction;
        theOne = new First;
        transaction.replaceR.id.content_layout, theOne;
        transaction.commit;
    }


    private void initView {

        one = LinearLayout findViewByIdR.id.one;
        two = LinearLayout findViewByIdR.id.two;
        three = LinearLayout findViewByIdR.id.three;
        four = LinearLayout findViewByIdR.id.four;
        one.setOnClickListenerthis;
        two.setOnClickListenerthis;
        three.setOnClickListenerthis;
        four.setOnClickListenerthis;

    }

    @Override
    public void onClickView view {

        FragmentManager fm = getSupportFragmentManager;
        FragmentTransaction ft = fm.beginTransaction;

        switch view.getId {

            case R.id.one:
                if theOne == null {
                    theOne = new First;
                }
                ft.replaceR.id.content_layout, theOne;
                break;

            case R.id.two:

                if theTwo == null {
                    theTwo = new Second;
                }
                ft.replaceR.id.content_layout, theTwo;
                break;

            case R.id.three:

                if theThree == null {

                    theThree = new Third;
                }
                ft.replaceR.id.content_layout, theThree;
                break;

            case R.id.four:
                if theFour == null {

                    theFour = new Fourth;
                }
                ft.replaceR.id.content_layout, theFour;
                break;

            default:
                break;

        }

        ft.commit;
    }
}

然后是,call的Fragment

public class First extends Fragment {

    private TabLayout tabLayout;
    private ViewPager pager;


    public First {
        // Required empty public constructor
    }


    @Override
    public View onCreateViewLayoutInflater inflater, ViewGroup container, Bundle savedInstanceState {
        // Inflate the layout for this fragment
        return inflater.inflateR.layout.fragment_first, container, false;
    }

    @Override
    public void onViewCreatedView view, @Nullable Bundle savedInstanceState {
        super.onViewCreatedview, savedInstanceState;
        tabLayout = TabLayout view.findViewByIdR.id.tabLayout;
        pager = ViewPager view.findViewByIdR.id.viewPager;
        
        
        FragmentsAdapter adapter = new FragmentsAdaptergetFragmentManager, Datas.getInstance.getTitleDatas, Datas
            .getInstance
            .getFragments;

        pager.setAdapteradapter;
        tabLayout.setupWithViewPagerpager;
        tabLayout.setTabsFromPagerAdapteradapter;
    }

}
  1. 贴上报错信息

  2. 贴上相关截图

  3. 已经尝试过哪些方法仍然没解决(附上相关链接)

FragmentsAdapter adapter = new FragmentsAdaptergetFragmentManager, Datas.getInstance.getTitleDatas, Datas
            .getInstance
            .getFragments;

这里传入 FragmentManager 的时候不要调用 getFragmentManager 方法(调用这个方法返回的是该 fragment 所在 activity 的 FragmentManager),应该使用 getChildFragmentManager 方法获取到的 FragmentManager。

fragment还没写。简单加个view就解决了

该答案已被忽略,原因:

(看完/读完)这篇文章有何感想! 999yzc亚洲城在线娱乐城的分享…

www.999yzc.comService发送广播到Activity没有接受到数据?

( www.999yzc.com )

Service:

public class MusicPlayService extends Service {

    private static MusicPlayer mPlayer = null;

    private int msg;

    private int currentTime;//当前播放进度
    private long duration;//播放长度

    private MusicContentListBean mSonginfo;

    private MusicInfoBean musicInfoBean;
    /**
     * handler用来接收消息,来发送广播更新播放时间
     */
    private Handler handler = new Handler {
        @Override
        public void handleMessageMessage msg {
            if msg.what == 1 {
                if mPlayer != null {
                    currentTime = mPlayer.getPlayCurrentTime;
                    Intent intent = new Intent;
                    intent.setActionMusicPlayState.MUSIC_CURRENT;
                    intent.putExtra"currentTime", currentTime;
                    sendBroadcastintent;
                    handler.sendEmptyMessageDelayed1, 1000;
                }
            }
        }
    };

    @Nullable
    @Override
    public IBinder onBindIntent intent {
        return null;
    }

    @Override
    public void onCreate {
        super.onCreate;

        mPlayer = new MusicPlayerthis;

    }

    @Override
    public void onDestroy {
        super.onDestroy;
    }

    @Override
    public int onStartCommandIntent intent, int flags, int startId {
        if intent != null {

            musicInfoBean = new MusicInfoBean;
            msg = intent.getIntExtra"MSG", 0;//播放信息

            mSonginfo = MusicContentListBean intent.getSerializableExtra"MusicInfoBean";

            if mSonginfo != null {

                musicInfoBean.setSongNamemSonginfo.getSongname;
                musicInfoBean.setSingerNamemSonginfo.getSingername;

                if mSonginfo.getM4a != null {
                    musicInfoBean.setUrlmSonginfo.getM4a;
                } else if mSonginfo.getUrl != null {
                    musicInfoBean.setUrlmSonginfo.getUrl;
                }

                musicInfoBean.setSingerPicmSonginfo.getAlbumpic_big;
            }
        }
        if msg == MusicPlayState.MPS_PLAYING {
            
            new PlayTaskthis.executeUri.parsemusicInfoBean.getUrl;
            handler.sendEmptyMessage1;
            
            Intent intent2 = new IntentMusicPlayState.MUSIC_INFO;
            intent.putExtra"NewMusicInfoBean", musicInfoBean;
            sendBroadcastintent2;
            
        } else if msg == MusicPlayState.MPS_PAUSE {
            mPlayer.pause;
        } else if msg == MusicPlayState.MPS_CONTINUE {
            mPlayer.resume;
        } else if msg == MusicPlayState.UPDATE_PROGRESS {
            currentTime = intent.getIntExtra"progress", -1;
            mPlayer.seekToMusiccurrentTime;
        }

        return super.onStartCommandintent, flags, startId;
    }


    public class PlayTask extends AsyncTask<Uri, Void, Void> {

        private Context mContext;

        public PlayTaskContext mContext {
            this.mContext = mContext;
        }

        @Override
        protected Void doInBackgroundUri... params {
            mPlayer.playOnlinemContext, params[0];
            return null;
        }
    }

    @Override
    public void onStartIntent intent, int startId {
        super.onStartintent, startId;
    }

}

Activity:广播已经注册了,也已经添加过滤了….

:
:
  /**
     * 用来接收从service传回来的广播的内部类
     */
    public class PlayerReceiver extends BroadcastReceiver {

        @Override
        public void onReceiveContext context, Intent intent {
            switch intent.getAction {
                case MusicPlayState.MUSIC_CURRENT:
                    currentTime = intent.getIntExtra"currentTime", -1;
                    musicsPlayerCurrentTime.setTextCommonUtils.durationToStringcurrentTime;
                    timeSbProgress.setProgresscurrentTime;
                    break;
                case MusicPlayState.MUSIC_DURATION:
                    duration = int intent.getLongExtra"SongDuration", -1;
                    Log.e"duration", String.valueOfduration;
                    timeSbProgress.setMaxduration;
                    musicsPlayerTotalTime.setTextCommonUtils.durationToStringduration;
                    break;
                case MusicPlayState.MUSIC_INFO:
                    MusicInfoBean infoBean = MusicInfoBean intent.getSerializableExtra"NewMusicInfoBean";
                    mPlayerDiscView.loadAlbumCoverinfoBean.getSingerPic;
                    musicsSongName.setTextinfoBean.getSongName;
                    musicsPlayerSongerName.setTextinfoBean.getSingerName;
                    break;
            }
        }
    }

确定下是否有并行地接收3个Action的过滤器?

广播接收不到,通常有三个原因:

  1. 没发

  2. 没注册监听

  3. 没权限(或一些其它配置)

  4. 被取消了

自定义广播通常是前两个问题。
题主的代码中一行log都没有,并且没有展示注册监听的代码,所以都有可能。

建议用Log.dString, String自行调试。

是否已经startService并执行到了MusicPlayState.MPS_PLAYING?

(看完/读完)这篇文章有何感想! www.999yzc.com的分享…

亚洲城官方网站android dp转化为px时,这个方法加上0.5f是怎么回事?

( 亚洲城官方网站 )

是Android系统的四舍五入吗?

对的, 因为 int 强制转换会把小数点后面直接去掉。 参照了 Math.round

为了四舍五入 例如 1.1 转换成int是 1 ; 而1.9转换成int 也是1; 所有的数加了0.5后 就可以实现四舍五入了,1.1 + 0.5 = 1.6 -> 1;1.9 + 0.5 = 2.4 -> 2

(看完/读完)这篇文章有何感想! 亚洲城官方网站的分享…

www.999yzc.com关于gradle的问题

( www.999yzc.com )

compile in.srain.cube:ultra-ptr:1.0.10

输入这个语句后studio会自动帮我下载一个库。

那么假如我想用这个下拉刷新,我改这么去找类似的那个库?

https://github.com/johannilsson/android-pulltorefresh

该怎么输入compile XXXXXXXXXXXX??

只有在maven中的第三方库才能完成自动下载,如果不在其中,就只能通过下载对应的jar放在本地进行导入了。一般在github上开源的项目,如果支持直接compile导入,会在README中说明的。

(看完/读完)这篇文章有何感想! www.999yzc.com的分享…

亚洲城官方网站安卓子线程更新UI

( 亚洲城官方网站 )

代码如下,为什么可以通过子线程更新UI.

package com.example.furtherhandler;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class LooperActivity extends Activity {

    private MyThread myThread = new MyThread;
    private TextView textView;

    @Override
    protected void onCreateBundle savedInstanceState {
        super.onCreatesavedInstanceState;
        setContentViewR.layout.activity_looper;
        
        textView = TextView findViewByIdR.id.textView1;
        myThread.start;
        textView.setOnClickListenernew OnClickListener {
            @Override
            public void onClickView v {
                myThread.start;
            }
            
        };
        
    }

    class MyThread extends Thread {
        
        @Override
        public void run {
            textView.setText"Update ui";
        }
        
    }
    
}

你可以在线程里面加一句睡眠几秒的代码试一下,应该会出现子线程更新ui的错误日志了。因为你是直接在oncreate方法里面开启线程,这个时候还没有对viewRootImpl实例化,所以不会检查是否是主线程。其实所谓不能在子线程更新ui只是官方强烈建议,你要更新也可以,前提是官方自己都没有对是否是子线程check得很好。

并没有什么规定不能在子线程里更新UI,而是不建议在子线程里更新UI,因为在非UI线程更新UI是不安全的线程安全问题,线程同步处理不好会带来不可预知的问题。你现在的代码逻辑不复杂,不存在UI线程与子线程同步的问题,所以你觉得没问题实际上也没问题,但还是不符合规范的。

(看完/读完)这篇文章有何感想! 亚洲城官方网站的分享…

亚洲城官方网站Android源码中有哪些使用到抽象工厂的类?

( 亚洲城官方网站 )

最近在看抽象工厂,想找几个Android源码中的例子,苦寻无果。有没有知道的朋友?

记得《Android 源码设计模式解析与实战》有一章讲到

另外这个是该书作者的项目,关于设计模式分析的
android_design_patterns_analysis

(看完/读完)这篇文章有何感想! 亚洲城官方网站的分享…

亚洲城官方网站win10 64如何让安卓模拟器支持vt-x

( 亚洲城官方网站 )

已经安装haxm,bios里也打开虚拟化支持了,cpu-z能检测到vt-x
为什么还是模拟器提示没有打开vt?管理员和非管理员模式都试过了
haxm的内存保留是2gb

已经找到问题是 360那个什么晶核盾甲搞的鬼

推荐使用genymotion,android开发最快最好用的模拟器,有免费版

(看完/读完)这篇文章有何感想! 亚洲城官方网站的分享…

www.999yzc.comhybrid app如何进行打包下载前端资源?

( www.999yzc.com )

背景

由于手上的Android app需要改版,用户流量越发增加,H5活动页面、展示页面也陆续地增加。所以打算基于native实现缓存方案加速。

架构

我们的架构是hybrid app,只有首页是native实现的,下面的几个条目作为H5的入口。
(为避免广告嫌疑,已经屏蔽相关字眼)

解决方案

上网查了一下hybrid app的H5加速方案,详见:http://trock.lofter.com/post/117023_e8e175

方案一:使用manifest,但是坑比较多,而且也不是最好的方案,一个文件改,所有都要更新。
方案二:打包下载前端资源,Android本地的解压。然后native和H5用spdy协议请求页面。Android可以实现增量更新。

我的疑惑

关于方案二是具体实现方法,我在网上搜索不到,而且很疑惑:
1.前端资源打包,是在服务器上发生的吗?
2.客户端如果知道有更新,对比md5,但不是说下载打包好变成一个zip包吗?那它怎么样去识别个边页面的更新?

或者我的理解完全错了?
有经验的同学请指教,谢谢!

我没有混合APP的开发经验,只是有不少功能我会选择用WebView+页面的形式去呈现。
所以针对题主的目的,是减少访问的流量,本身WebView就有缓存的机制,不知道为什么还需要先去下载图片等相关资源,如果打包针对资源进行比较,那么一张图片修改了不是说整个页面的资源都需要重新下载吗?

因为我这边是采取本地html页面和网络图片的形式,所以我这边每次需要更新只是本地的html页面,图片或者CSS和js都还是在后端。WebView会进行适当的缓存,鉴于不太清楚题主混合应用的开发形式所以也不太好发表。

一个CDN不接解决问题了。。

我负责前端的开发。

跟客户端同事请教,得到两种方案:
①后端对不频繁更新的页面进行打包,客户端解压;
②对于频繁更新的页面,后端发送一个list,这个list有文件的名字、版本号、md5。客户端下载这个list,进行diff操作,按照一定的规则进行下载、替换、删除文件。

跟后端同事请教,得到如下信息:
这个app的主要业务在后端,现在的流量量级,就算改版后,5倍的量级也远远未达到1000qps,所以现在的资源不跑CDN也可以。前端的性能优化现阶段不是很需要,对于文件目录和代码的重构更为重要。

综合方案:
现阶段不需要对性能的优化作太多考虑,所以从客户端同事得到的方案可能要到后期才能实行。@zzxxasp 同学提到的方案即用webview缓存已经够用了。也可以结合@TIGERB 同学的CDN方案。

(看完/读完)这篇文章有何感想! www.999yzc.com的分享…

亚洲城官方网站android怎么用摄像头扫描感知扫描区域的大概颜色?

( 亚洲城官方网站 )

我的思路是获取每一个点的颜色值然后进行判断,不知道有没有更好的办法或者具体实现

感谢各位的帮助,这是我的一个面试题目,我在github上找到一了个实现
https://github.com/yieryi/ColorWithCamera

如果精度要求不高的话,使用Android提供的Palette类即可做到

需求很简单,但实现可不简单,不是三言两语能说清楚,图像识别很有深度,图像噪音过滤、轮廓加强提取、色域分析等方面的知识内容。有兴趣可以了解一下OpenCV。

可以看看android L Palette的实现:https://zm10.sm-tc.cn/?src=http%3A%2F%2Fwww.android100.org%2Fhtml%2F201507%2F06%2F161823.html&uid=510d7459e7d4a0e18aab8234b35e492e&hid=cd5c33f4663d33a17d1c6992451460ee&pos=10&cid=9&time=1456669536064&from=click&restype=1&pagetype=0000004000000402&bu=news_natural&query=android+Palette&mode=&uc_param_str=dnntnwvepffrgibijbprsvpi

(看完/读完)这篇文章有何感想! 亚洲城官方网站的分享…