0

![在此处输入图像描述][1]我已经自定义ListViewRadioButton&Text每行。我如何禁用和启用(即)RadioButton中的点击。我如何通过 ENABLE 和 DISABLE点击来禁用和启用选择 s。下面是我的代码。我怎么能这样做?ListView
ListView RadioButtonButton

ListView LSOne;
        Button lock, unlock;
        int[] _intRadio = new int[20];
        String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars",
                        "Jupiter", "Saturn", "Uranus", "Neptune" };

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                LSOne = (ListView) findViewById(R.id.listView1);
                lock = (Button) findViewById(R.id.lock);
                unlock = (Button) findViewById(R.id.unlock);
                lock.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View arg0) {
                            **LsAdapter.isEnabled = !LsAdapter.isEnabled;
            int first = LSOne.getFirstVisiblePosition();
            for (int i = first; LSOne.getChildAt(i) != null; i++) {
                RadioButton button = ((RadioButton) LSOne.getChildAt(i)
                        .findViewById(R.id.radioButton1));
                button.setEnabled(LsAdapter.isEnabled);**

                        }
                });

                unlock.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View arg0) {
                                //need to do enable option

                        }
                });

                ArrayList<String> planetList = new ArrayList<String>();
                planetList.addAll(Arrays.asList(planets));

                // Create ArrayAdapter using the planet list.
                LsAdapter listAdapter = new LsAdapter(this, R.layout.country_info,
                                planetList);

                LSOne.setAdapter(listAdapter);

        }

        public class LsAdapter extends ArrayAdapter<String> {
                private LayoutInflater mInflater;
                private String[] mTaxi = null;
                private String[] mid = null;
                long id;
                **public boolean isEnabled;**
                private int mViewResourceId;

                public LsAdapter(Context ctx, int viewResourceId,
                                ArrayList<String> planetList) {
                        super(ctx, viewResourceId);

                        mInflater = (LayoutInflater) ctx
                                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                        String[] tax = planetList.toArray(new String[planetList.size()]);

                        mTaxi = tax;

                        mViewResourceId = viewResourceId;
                }

                @Override
                public int getCount() {
                        return mTaxi.length;
                }

                @Override
                public String getItem(int position) {
                        return mTaxi[position];
                }

                @Override
                public long getItemId(int position) {
                        return 0;
                }

                @Override
                public int getViewTypeCount() {
                        // TODO Auto-generated method stub
                        return 20;
                }

                @Override
                public int getItemViewType(int position) {
                        // TODO Auto-generated method stub
                        return position;
                }

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                        ViewHolder holder = null;
                        Log.v("ConvertView", String.valueOf(position));
                        int _intPosition = getItemViewType(position);
                        if (convertView == null) {
                                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                convertView = vi.inflate(R.layout.country_info, null);
                                holder = new ViewHolder();
                                holder.code = (TextView) convertView
                                                .findViewById(R.id.textView1);
                                holder.name = (RadioButton) convertView
                                                .findViewById(R.id.radioButton1);
                                convertView.setTag(holder);

                                holder.code.setText(mTaxi[position]);
                                holder.name.setId(_intPosition);
                        **if (isEnabled) {
                holder.name.setEnabled(true);
            } else if (!isEnabled) {
                holder.name.setEnabled(false);
            }**

                                holder.name.setOnClickListener(new View.OnClickListener() {
                                        public void onClick(View v) {
                                                for (int i = 0; i < _intRadio.length; i++) {
                                                        if (i == v.getId()) {
                                                                _intRadio[i] = 1;
                                                        } else {
                                                                _intRadio[i] = 0;
                                                        }
                                                }
                                                notifyDataSetChanged();
                                        }
                                });
                        } else {
                                holder = (ViewHolder) convertView.getTag();
                        }

                        if (_intRadio[_intPosition] == 1) {
                                holder.name.setChecked(true);
                        } else {
                                holder.name.setChecked(false);
                        }

                        return convertView;

                }

                private class ViewHolder {
                        TextView code;
                        RadioButton name;
                        Button btn;
                }
        }

谢谢。

4

2 回答 2

2

您不必编写两个不同的锁定/解锁实现。您可以在 LsAdapter 中创建一个公共布尔变量,以便 LSOne 可以切换它:

public class LsAdapter extends ArrayAdapter<String> {
    ...
    public boolean isEnabled;

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    ...
    if(isEnabled)
    //enable or disable the radio button here

}

然后,像这样创建一个 onClickListener:

lock = (Button) findViewById(R.id.lock);
lock.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {

        LsAdapter.isEnabled = !LsAdapter.isEnabled;
        int first = LSOne.getFirstVisiblePostition();
        for(int i=first; LSOne.getChildAt(i)!=null; i++) {
            RadioButton button = ((RadioButton) LSOne.getChildAt(i).findViewById(your_radio_button_id));
            button.setEnabled(LsAdapter.isEnabled);
        }
    }
});
于 2013-04-24T08:43:34.220 回答
1
btn.setEnabled(false); //to disable

btn.setEnabled(true); //to enable

有时它不会停止某些设备上的多点/快速点击,因此替代选项是

btn.setClickable(false); //to disable

btn.setClickable(true); //to enable
于 2013-04-24T07:54:29.800 回答