Custom ListView in Fragment not adhering to parent theme

前端 未结 2 1822
挽巷
挽巷 2020-12-18 08:57

I\'m currently having an issue with using custom ListView adapters with the Holo.Light theme. Within the activities and fragments, any TextViews are displayed in the theme\'

相关标签:
2条回答
  • 2020-12-18 09:20

    You haven't posted any actual code, but since I've had exactly the same problem, I would guess that you are passing the wrong Context to your custom adapter constructor.

    I've been doing something like this (within my Fragment):

    dataSource = new MyCursorAdapter(getActivity().getApplicationContext(), R.layout.myrow, data,
                fields, new int[] { R.id.field1, R.id.field2 });
    

    All I had to do to fix the problem, was to replace getActivity().getApplicationContext() by getActivity():

    dataSource = new MyCursorAdapter(getActivity(), R.layout.myrow, data,
                fields, new int[] { R.id.field1, R.id.field2 });
    

    And it started to work as expected.

    MyCursorAdapter (extending SimpleCursorAdapter) constructor:

    public MyCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to) { //... }
    
    0 讨论(0)
  • 2020-12-18 09:30

    Yes, I had the same problem and reading what rockford posted I could solve it, don't be necessary to use getApplicationContext() when you're implementing an adapter.

    Here is the code of my ListFragment class:

    public class TipoProveedorFavoritoActivity extends ListFragment {
    
        Context mContext;
        MiApp myApp;
        Usuario usuario;
        ProgressDialog progressDialog;
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onActivityCreated(savedInstanceState);
            //getListView().setCacheColorHint(Color.BLACK);
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
    
            mContext = getActivity();
            myApp = (MiApp)getActivity().getApplication();
            usuario = myApp.usuario;
    
            // Progress Dialog
    
            progressDialog = new ProgressDialog(mContext);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressDialog.setMessage("Espere...");
            progressDialog.setProgress(0);
    
    
            Log.d("usuario", String.valueOf(usuario.id));
    
            ConsultaDB consulta = new ConsultaDB();
            consulta.execute();
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            return inflater.inflate(R.layout.tipoproveedorfavorito_activity, container, false);
        }
    
        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
            // TODO Auto-generated method stub
            super.onListItemClick(l, v, position, id);
        }
    
        // Creamos la clase para el adaptador de los tipos de proveedores
        public static class TipoProveedorArrayAdapter extends ArrayAdapter<TipoProveedor>
        {
            public Context context;
            public List<TipoProveedor> listaTipoProveedor;
    
            public TipoProveedorArrayAdapter(Context context,List<TipoProveedor> listaTipoProveedor){
                super(context, R.layout.tipoproveedorfavorito_activity,listaTipoProveedor);
    
                this.context = context;
                this.listaTipoProveedor = listaTipoProveedor;
            }
    
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
                View view;
                if(convertView==null){
    
                    LayoutInflater layoutInflater =  (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    view = layoutInflater.inflate(R.layout.tipoproveedor_content, parent,false);                
                    final ViewHolder holder = new ViewHolder();
    
                    //holder.txtId=(TextView)view.findViewById(R.id.txtId);
                    holder.txtTipoProveedor=(TextView)view.findViewById(R.id.txtTipoProveedor);
    
                    view.setTag(holder);
                    holder.txtTipoProveedor.setTag(listaTipoProveedor.get(position));
                }else{
                    view=convertView;
                    ViewHolder holder2 = (ViewHolder)view.getTag();
                    holder2.txtTipoProveedor.setTag(listaTipoProveedor.get(position));
                }
    
                ViewHolder holder = (ViewHolder)view.getTag();
                TipoProveedor tipoProveedor = listaTipoProveedor.get(position);
                //holder.txtId.setText(String.valueOf(tipoProveedor.id) );
                holder.txtTipoProveedor.setText(tipoProveedor.tipoProveedor);
    
                return view;
    
            }
    
            private class ViewHolder{
                //public TextView txtId;
                public TextView txtTipoProveedor;
    
            }
    
        }
    
        private class ConsultaDB extends AsyncTask<Void, Integer, TipoProveedorArrayAdapter>{
    
            @Override
            protected void onPostExecute(TipoProveedorArrayAdapter result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);
                setListAdapter(result);
                progressDialog.dismiss();
            }
    
            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method stub
                super.onPreExecute();
                progressDialog.show();
            }
    
            @Override
            protected TipoProveedorArrayAdapter doInBackground(Void... params) {
                // TODO Auto-generated method stub
                String SQL = "SELECT t2.tipoProveedor AS id,t3.descripcion From Favoritos t1 " +
                        "INNER JOIN Proveedor t2 ON t2.id = t1.idProveedor " +
                        "INNER JOIN TipoProveedor t3 ON t3.id = t2.tipoProveedor " +
                        "Where t1.idUsuario = ? GROUP BY t2.tipoProveedor,t3.descripcion ORDER BY t2.tipoProveedor";
    
                UtilDB db = UtilDB.GetUtilDb(mContext);
                db.openDataBase();
    
                Cursor cursor = db.getDataBase().rawQuery(SQL,new String[]{String.valueOf(usuario.id)});
                //Cursor cursor = db.getDataBase().rawQuery(SQL,null);
    
                List<TipoProveedor> tipoProveedor = new ArrayList<TipoProveedor>();
    
                while(cursor.moveToNext()){
    
                    long id = cursor.getLong(cursor.getColumnIndex("id"));
                    String descripcion = cursor.getString(cursor.getColumnIndex("descripcion")); 
    
                    TipoProveedor tp = new TipoProveedor();
                    tp.id=id;
                    tp.tipoProveedor=descripcion;
                    tipoProveedor.add(tp);
    
                }
    
                cursor.close();
                db.close();
    
                TipoProveedorArrayAdapter adapter = new TipoProveedorArrayAdapter(mContext, tipoProveedor);
                //setListAdapter(adapter);
    
                return adapter;
            }
    
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题