Android屏幕白色组件在简历上变黑

时间:2014-07-13 23:11:34

标签: android android-layout

我的Android应用程序面临极其严重的问题。我在任何地方都看不到任何类似的解决方案,无论是谷歌还是SO。

以下是该应用的截图: enter image description here

这是正常的预期输出。但是当我退出应用程序并从启动器再次恢复时,经常(比如5次中的2次)我碰巧得到了白色组件(列表视图和EditText),如下所示:

enter image description here

在这张图片中,我在截取屏幕截图时触及了listview的第一个元素,以便显示listview项目具有实际内容而不是空白。

这是我的布局资源文件main.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/ll"
              android:cacheColorHint="#00000000"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent" android:weightSum="15" android:background="@android:color/white">


    <EditText
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:id="@+id/edittext" android:layout_weight="2" android:background="#ffffff"
            android:textColor="@android:color/black" android:gravity="center" android:hint="Enter Your Text Here"/>
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp" android:layout_weight="2"
            android:weightSum="12" android:gravity="center">
        <Button android:layout_width="0dp"
                android:layout_height="match_parent"
                android:text="Tweet"
                android:id="@+id/tweetbtn"
                android:background="@drawable/mybutton"
                android:layout_weight="6"/>
        <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:text="Search"
                android:background="@drawable/mybutton"
                android:id="@+id/searchbtn"
                android:layout_weight="6"/>
    </LinearLayout>
    <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:text="Most Frequently Tweeted"
            android:id="@+id/listviewlabel" android:layout_weight="1" android:gravity="center" android:background="#adadad"
            android:textColor="@android:color/black"/>
    <ListView
            android:cacheColorHint="#00000000"
            android:background="#ffffff"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:id="@+id/listView" android:layout_gravity="center_horizontal" android:layout_weight="10"
            android:choiceMode="singleChoice"/>
</LinearLayout>

请有人帮我解决这个问题。 Atleast帮我解决了白色的EditText问题。这将给我一些解决listview问题的线索。

编辑: 列表视图由元素动态填充。这是我的onStart()方法:

@Override
    public void onStart(){
        super.onStart();

        handleFrequentMenuSelected();
    }

这是handleFrequentMenuSelected():

private void handleFrequentMenuSelected() {
        if(!isAccountAdded()){
            showToast("Add an account first to get started! Goto Menu and select account.");
        }else{
            List<StatusElement>aList=getStatusElementsFromSQLiteDatabase();
            HashMap<String,Integer> hMap=new HashMap<String, Integer>();
            for(StatusElement s:aList){
                String tokens[]=s.toString().split(" ");
                String outText="";
                if(tokens.length>1){
                    if(tokens[0].contains("/")){
                        String tokens2[]=tokens[0].split("/");
                        try{
                            long l=Long.parseLong(tokens2[0]);
                            for(int i=1;i<tokens.length;i++){
                                outText=outText+tokens[i]+" ";
                            }
                        }catch(Exception e){
                            outText=s.toString();
                        }
                    }else{
                        try{
                            long l=Long.parseLong(tokens[0]);
                            for(int i=1;i<tokens.length;i++){
                                outText=outText+tokens[i]+" ";
                            }
                        }catch(Exception e){
                            outText=s.toString();
                        }
                    }

                }else{
                    outText=s.toString();
                }
                outText=outText.trim();
                if(hMap.containsKey(outText)){
                    int cnt=hMap.get(outText);
                    cnt++;
                    hMap.put(outText,cnt);
                }else{
                    hMap.put(outText,1);
                }
            }
            hMap= (HashMap<String, Integer>) StaticConstants.sortByValue(hMap);
            ArrayList<String>tweets=new ArrayList<String>();
            ArrayList<Integer>frequencies=new ArrayList<Integer>();
            ArrayAdapter<String>adapter;

            int count=0;
            for(String s:hMap.keySet()){
                tweets.add(s);
                frequencies.add(hMap.get(s));
                count++;
                if(count==50)
                    break;
            }
            adapter=new MyCustomFrequentArrayAdapter(this,tweets,frequencies);
            listView.setAdapter(adapter);
            listViewLabel.setText("Most Frequent Tweets");
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, final View view,
                                        int position, long id) {
                    final String item = (String) parent.getItemAtPosition(position);
                    editText.setText(System.currentTimeMillis()+" "+item);
                }
            });
        }
    }

这是我的MyCustomFrequentArrayAdapter:

class MyCustomFrequentArrayAdapter extends ArrayAdapter<String> {
        private final Context context;
        private final ArrayList<String> values;
        private final ArrayList<Integer>frequencies;

        public MyCustomFrequentArrayAdapter(Context context, ArrayList<String> values,ArrayList<Integer>frequencies) {
            super(context, R.layout.customlistview, values);
            this.context = context;
            this.values = values;
            this.frequencies=frequencies;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View rowView = inflater.inflate(R.layout.customlistview, parent, false);
            TextView textView1 = (TextView) rowView.findViewById(R.id.firstLine);
            TextView textView2 = (TextView) rowView.findViewById(R.id.secondLine);
            Log.d("Position",""+position);
            //Extracting first six words
            String s=values.get(position);
            String tokens[]=s.split(" ");
            String dispText="";
            if(tokens.length>6){
                for(int i=0;i<6;i++){
                    dispText=dispText+tokens[i]+" ";
                }
            }else{
                dispText=s;
            }
            textView2.setText(dispText);
            textView1.setText("Frequency:"+frequencies.get(position));
            return rowView;
        }
    }

1 个答案:

答案 0 :(得分:1)

引用Romain Guy撰写的博客文章 - Why Is My List Black

ListView有顶部和底部渐变边缘,表示它可以滚动。

创建渐弱边缘会产生性能问题,因此ListView会进行优化以提高性能。遗憾的是,如果ListView的背景设置为默认值以外的其他值,则优化会导致问题。

可以通过设置android:cacheColorHint="#00000000"来禁用优化,因为您正在做博客文章中的引用...

  

要解决此问题,您只需禁用缓存颜色提示优化,如果使用非纯色背景,或将提示设置为适当的纯色值。

换句话说,使用android:cacheColorHint="#00000000"只能用于&#34;非纯色&#34; (透明/半透明的)。

在您的情况下,您使用的是#ffffff这是一个RGB值,默认情况下,这意味着它的&#39; A&#39;组件(alpha)将ff使其完全不透明,即&#34; solid&#34;。

所以参考上面引用的最后一部分......

  

...将提示设置为适当的纯色值。

这表明您应该使用android:cacheColorHint="#ffffff"来解决ListView问题。