【问题标题】:Change text color of list items in array adapter更改数组适配器中列表项的文本颜色
【发布时间】:2013-05-17 03:44:23
【问题描述】:

我创建一个列表视图并在我的自定义对话框中实现该列表视图。该列表视图使用数组适配器,在我的数组适配器中,我使用自己的布局和所需的颜色。代码如下。

 listView = new ListView(context);
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(Loged.this,
                        R.layout.my_spinner_layout, items);
listView.setAdapter(adapter);

在这里,我的列表项的单击侦听器工作正常。

问题现在开始了。我需要在我的自定义警报对话框中有一个列表视图,每一行都包含一个单选按钮。我使用相同的方法。这是我的代码。

listView = new ListView(context);
                 ArrayAdapter<String>adapter = new ArrayAdapter<String>(context,R.layout.my_single_choice_layout, choice);
                 listView.setAdapter(adapter);

这里可以同时检查所有单选按钮。而且我的听众工作不正常。

my_spinner_layout_xml

<?xml version="1.0" encoding="utf-8"?>
<TextView  
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        style="@style/ListItemTextColor"
        />

和 my_single_choice_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:id="@+id/my_choice_radio"
    android:layout_height="match_parent"
    android:button="@null"
    android:drawableRight="@android:drawable/btn_radio"
    android:text="Option"
    style="@style/ListItemTextColor" >


</RadioButton>

【问题讨论】:

标签: android android-listview radio-button android-arrayadapter


【解决方案1】:

试试这个:

list.setAdapter(new EfficientAdapter(context,R.layout.my_single_choice_layout, choice));

然后创建一个类

 public class EfficientAdapter extends ArrayAdapter {

         private LayoutInflater mInflater;

            private String[] mStrings;

            private int mViewResourceId;

            public EfficientAdapter(Context ctx, int viewResourceId,String[] strings) {
                super(ctx, viewResourceId, strings);

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

                mViewResourceId = viewResourceId;
            }
            @Override
            public int getCount() {
                return mStrings.length;
            }

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

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

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                convertView = mInflater.inflate(mViewResourceId, null);

                convertView.setMinimumHeight(132);
                TextView tv = (TextView)convertView.findViewById(R.id.option_text); //Give Id to your textview
                tv.setText(mStrings[position]);
                    tv.setTextColor(Color.RED);
                RadioButtons r=(RadioButtons)convertview.findviewById(Radio button id);
                r.setOnCheckedListener(new ur listener()
{
/////////Do whatever you wanna do overhere
});

                return convertView;
            }

    }

希望对你有帮助。

【讨论】:

  • 谢谢。我只需要将 return convertView; 更改为 return super.getView(position, convertView, parent); 即可。
【解决方案2】:

您必须为此使用自定义适配器。

jst参考的示例代码,它不是完整的实现

class Myadapter extends ArrayAdapter<String>{

        LayoutInflater inflater=null;

        public Myadapter(Context context, int resource, int textViewResourceId,
                List<String> objects) {
            super(context, resource, textViewResourceId, objects);
             inflater = (LayoutInflater)getLayoutInflater();
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub

            View row = convertView;
            if(convertView==null){
              row= inflater.inflate(R.layout.activity_list_item, null);

              RadioButton rb = row.findViewById(R.id.radiobtn);

              rb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    // TODO Auto-generated method stub

                    //here write your code for radio button event 

                }
            });

            }
            return row;
        }
    }

【讨论】:

  • 但对于 simple_list_item 我将 ArrayAdapter 更改为 ArrayAdapter adapter = new ArrayAdapter(Loged.this, R.layout.my_spinner_layout, items);代替 ArrayAdapteradapter = new ArrayAdapter(context,android.R.layout.simple_list_item,choice);它的工作不需要 CstomAdapter。
  • 那你的问题是什么??我说如果你想改变 TextView textColor 运行时那么你需要实现自定义适配器..
  • 我的问题是每行中的单选按钮同时被选中。并且监听器也不起作用
  • 那么你必须实现自定义采用者,在其中扩展你的视图并为 radioButton 设置 setOnCheckedChangeListener
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多