Función pequeña de Android (1): realice la función de selección única en ListView

https://www.jianshu.com/p/6af0a7a59756

Basándose en la base de Java anterior, la empresa tiene la oportunidad de aprender mientras desarrolla Android. Esta serie espera estimularme a resumir y aprender algunas pequeñas funciones prácticas en el proyecto, y también profundizar en mi comprensión del desarrollo de Android.
Al entrar en el tema, coloco esta pequeña función de selección única en una pequeña escena, que consiste en elegir mi marca de teléfono móvil favorita. El efecto después de la finalización es el siguiente:

Elección única.jpg

La herramienta utilizada en el proyecto es Android Studio, hijo de Google.
Vamos a codificar:
En la imagen podemos ver que necesitamos un ListView. Luego hay un Adaptador personalizado para ListView.
El código es el siguiente, primero está el archivo de diseño:
activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/id_myList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:choiceMode="singleChoice"
        android:cacheColorHint="@android:color/transparent"
        android:listSelector="@android:color/transparent">
    </ListView>
</RelativeLayout>

Continuamos, con el ListView inicializamos la vista y los datos correspondientes. Los datos inicializados son muy simples, solo hay una variable de tipo String:

 

public class Brand {    
   private String bandname;    
   public Brand(String bandname){        
       this.bandname = bandname;    
   }    
   public String getBandname() { 
       return bandname;    
   }    
   public void setBandname(String bandname) { 
       this.bandname = bandname;                             
   }
}

El siguiente paso es inicializar la vista y los datos del adaptador en MainAcitivity:

 

public class MainActivity extends AppCompatActivity {


    private ListView mListView; //首页的ListView
    private List<Brand> namesList; //用于装载数据的集合
    private int selectPosition = -1;//用于记录用户选择的变量
    private Brand selectBrand; //用户选择的品牌

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initDatas();
    }

    private void initView(){
        mListView = (ListView)findViewById(R.id.id_myList);
    }

    private void initDatas(){
        //初始化ListView适配器的数据
        namesList = new ArrayList<>();
        Brand brand0 = new Brand("apple");
        Brand brand1 = new Brand("sony");
        Brand brand2 = new Brand("xiaomi");
        Brand brand3 = new Brand("oppo");
        Brand brand4 = new Brand("meizu");
        Brand brand5 = new Brand("smartisan");
        Brand brand6 = new Brand("vivo");
        Brand brand7 = new Brand("samsung");
        Brand brand8 = new Brand("letv");
        Brand brand9 = new Brand("nubia");
        Brand brand10 = new Brand("lg");
        Brand brand11 = new Brand("qiku");
        Brand brand12 = new Brand("huawei");
        namesList.add(brand0);
        namesList.add(brand1);
        namesList.add(brand2);
        namesList.add(brand3);
        namesList.add(brand4);
        namesList.add(brand5);
        namesList.add(brand6);
        namesList.add(brand7);
        namesList.add(brand8);
        namesList.add(brand9);
        namesList.add(brand10);
        namesList.add(brand11);
        final MyAdapter myAdapter = new MyAdapter(this,namesList);
        mListView.setAdapter(myAdapter);
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //获取选中的参数
                selectPosition = position;
                myAdapter.notifyDataSetChanged();
                selectBrand = namesList.get(position);
                Toast.makeText(MainActivity.this,"您选中的手机品牌是:"+selectBrand.getBandname(),Toast.LENGTH_SHORT).show();
            }
        });
    }

    public class MyAdapter extends BaseAdapter{
        Context context;
        List<Brand> brandsList;
        LayoutInflater mInflater;
        public MyAdapter(Context context,List<Brand> mList){
            this.context = context;
            this.brandsList = mList;
            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        @Override
        public int getCount() {
            return brandsList.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            ViewHolder viewHolder = null;
            if(convertView == null){
                convertView = mInflater.inflate(R.layout.adapter_item,parent,false);
                viewHolder = new ViewHolder();
                viewHolder.name = (TextView)convertView.findViewById(R.id.id_name);
                viewHolder.select = (RadioButton)convertView.findViewById(R.id.id_select);
                convertView.setTag(viewHolder);
            }else{
                viewHolder = (ViewHolder)convertView.getTag();
            }
            viewHolder.name.setText(brandsList.get(position).getBandname());
            if(selectPosition == position){
                viewHolder.select.setChecked(true);
            }
            else{
                viewHolder.select.setChecked(false);
            }
            return convertView;
        }
    }
    public class ViewHolder{
        TextView name;
        RadioButton select;
    }
}

Finalmente, el diseño del Adaptador

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp">
    <RadioButton
        android:id="@+id/id_select"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:button="@null"
        android:layout_marginLeft="10dp"
        android:background="@drawable/radio"
        android:checked="false"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"/>
    <TextView
        android:id="@+id/id_name"
        android:layout_marginLeft="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp"
        android:layout_gravity="center"
        android:text="姓名"/>
</LinearLayout>

Aquí hay algunos puntos para explicar:
1. En el futuro, para evitar que RadioButton sea deseleccionado después de hacer clic en el elemento de ListView, establezca el atributo en el que se puede hacer clic en falso y configure ListView android:choiceMode="singleChoice"para que sea fácil de entender de acuerdo con el nombre, que es el modo de selección única,
2. Preste atención, aquí está convertView = mInflater.inflate(R.layout.adapter_item,parent,false);la convertView = mInflater.inflate(R.layout.adapter_item,null);diferencia, para establecer la altura de fila de ListView se inicializará de acuerdo con el anterior convertView.
3. Consulte el código fuente para conocer los recursos de estilo e imagen de RadioButton.

https://github.com/gangdou91up/MultipleApplication.git



Autor: Gang bean
link: https: //www.jianshu.com/p/6af0a7a59756
Fuente: Los libros de Jane
tienen derechos de autor del autor. Para reimpresiones comerciales, comuníquese con el autor para obtener autorización. Para reimpresiones no comerciales, indique la fuente.

Supongo que te gusta

Origin blog.csdn.net/az44yao/article/details/112611133
Recomendado
Clasificación