2

i can write simple array adapter from class structure, but now i want to write simple array adapter from String, in my application i have simple array as :

private String[]  panelNumbers;
panelNumbers = G.getActiveUserInfo().phoneNumbers.split(",");

for show this array into Listview, array items merged with RadioButton, my xml layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="vertical" >

    <RadioButton
        android:id="@+id/radio1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checkMark="@android:drawable/btn_radio"
        android:gravity="right|center_vertical"
        android:text="xcgdf"
        android:textColor="@color/black_text" />

    <TextView
        android:id="@+id/text1"
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@drawable/gradient_divider"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

now i want to fill this array items by custom array adapter my ArrayAdapter dont correct

My ArrayAdapter

public class AdapterSmsPanelNumbers extends ArrayAdapter<String[]> {

    public AdapterSlideMenuSMS(String[] array) {
        super(G.context, R.layout.call_list, array);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = G.inflater.inflate(R.layout.single_choice, parent, false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.text.setText(array[position]);
        return convertView;
    }

    private static class ViewHolder {
        private final TextView    text;
        private final RadioButton radio;
        public ViewHolder(View view) {
            text = (TextView) view.findViewById(R.id.text1);
            radio = (RadioButton) view.findViewById(R.id.radio1);
        }
    }
}

PROBLEM i can not fill listview items by single String[], i dont want to create class from panelNumbers,please help me to resolve this class problems to have simple ArrayAdapter showing simple Array

4
  • What is the problem? Commented Feb 26, 2015 at 8:33
  • 1
    change ArrayAdapter<String> and holder.text.setText(getItem(position)); Commented Feb 26, 2015 at 8:34
  • @Sergey Glotov i can not fill list view items from single String[] array Commented Feb 26, 2015 at 8:35
  • @Sergey Glotov my post updated, please review that Commented Feb 26, 2015 at 8:37

2 Answers 2

3

The Adapter concept has to be understood first. It needs an array (or list) of objects so for each item it will find inside it, it will generate a View (when needed).

Here, if you want to play with an array of String, you must tell to the ArrayAdapter that it will handle Strings, with :

public class AdapterSmsPanelNumbers extends ArrayAdapter<String>

The ArrayAdapter already has a mechanic to handle these Strings you will give him. A method make it easy to get an item in the provided array :

String stringAtPosition = getItem(position);

So, as @SorryForMyEnglish suggested:

public class AdapterSmsPanelNumbers extends ArrayAdapter<String> {

    public AdapterSlideMenuSMS(Context context, String[] array) {
        super(context, 0, array);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.single_choice, parent, false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.text.setText(getItem(position));
        return convertView;
    }

    private static class ViewHolder {
        private final TextView    text;
        private final RadioButton radio;
        public ViewHolder(View view) {
            text = (TextView) view.findViewById(R.id.text1);
            radio = (RadioButton) view.findViewById(R.id.radio1);
        }
    }
}

Then in your Activity, you can use this custom ArrayAdapter :

private String[]  panelNumbers;
panelNumbers = G.getActiveUserInfo().phoneNumbers.split(",");

ArrayAdapter adapter = new AdapterSmsPanelNumbers(this, panelNumbers);
listView.setAdapter(adapter);
Sign up to request clarification or add additional context in comments.

Comments

0

For people who see the question and just want to know how to create an array adapter from a programmatically created list of strings instead of a string resource, you just need to do

String[] myStringArray = (String[]) myArrayListOfStrings.toArray();
ArrayAdapter<CharSequence> myAdapter = new ArrayAdapter(getContext(), R.layout.my_layout, myStringArray);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.