代码之家  ›  专栏  ›  技术社区  ›  6rchid

在ListView中滚动会丢失文本颜色和字体

  •  0
  • 6rchid  · 技术社区  · 6 年前

    我不知道为什么它不工作,但我的代码应该做的是非常简单的。

    我在getView()中声明了一个具有默认文本颜色(黑色)和字体(单空格)的ListView,因此在创建视图时一切正常。

    非常感谢您的帮助!谢谢

    private ArrayList<String> list;
    private ListView myView;
    private ListAdapter listAdapter;
    
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
    
        list = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            list.add("Hello world " + i);
        }
        listAdapter = new ListAdapter();
        myView = (ListView) findViewById(R.id.myList);
        myView.setAdapter(listAdapter);
        myView.setOnItemClickListener(new  AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView tv = (TextView) view.findViewById(R.id.textView);
                tv.setTextColor(Color.RED);
                tv.setTypeface(Typeface.MONOSPACE, Typeface.BOLD);
    
            }
        });
    }
    
    public class ListAdapter extends BaseAdapter {
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            view = getLayoutInflater().inflate(R.layout.listview_layout, null);
            TextView txt = (TextView) view.findViewById(R.id.textView);
            txt.setText(list.get(i));
            txt.setTextColor(Color.BLACK);
            txt.setTypeface(Typeface.MONOSPACE, Typeface.NORMAL);
            return view;
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   aminography    6 年前

    public class MainActivity extends AppCompatActivity {
    
        private List<Pair> list;
        private ListAdapter listAdapter;
        private ListView myView;
        private int lastClickedPosition = 0;
    
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_list);
    
            list = new ArrayList<>();
            for (int i = 0; i < 20; i++) {
                list.add(new Pair("Hello world " + i, false));
            }
            listAdapter = new ListAdapter();
            myView = (ListView) findViewById(R.id.myList);
            myView.setAdapter(listAdapter);
            myView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    list.get(lastClickedPosition).flag = false;
                    list.get(position).flag = true;
                    lastClickedPosition = position;
                    listAdapter.notifyDataSetChanged();
                }
            });
        }
    
        public class ListAdapter extends BaseAdapter {
            @Override
            public View getView(int i, View view, ViewGroup viewGroup) {
                view = getLayoutInflater().inflate(R.layout.listview_layout, null);
                TextView txt = (TextView) view.findViewById(R.id.textView);
                txt.setText(list.get(i).text);
    
                if (list.get(i).flag) {
                    txt.setTextColor(Color.RED);
                    txt.setTypeface(Typeface.MONOSPACE, Typeface.BOLD);
                } else {
                    txt.setTextColor(Color.BLACK);
                    txt.setTypeface(Typeface.MONOSPACE, Typeface.NORMAL);
                }
    
                return view;
            }
    
            @Override
            public int getCount() {
                return list.size();
            }
    
            @Override
            public Object getItem(int i) {
                return null;
            }
    
            @Override
            public long getItemId(int i) {
                return 0;
            }
        }
    
        static class Pair {
            String text;
            boolean flag;
    
            Pair(String text, boolean flag){
                this.text = text;
                this.flag = flag;
            }
        }
    }