Search code examples
javaandroidandroid-listviewandroid-arrayadapterstringbuilder

Error with StringBuilder and ArrayAdapter


I am having a problem trying to pass a StringBuilder into an ArrayAdapter so that it will display in a ListView. I'm getting a cannot resolve constructor error when compiling and I'm sure it has something to do with the StringBuilder. Java is not my first language so any explanation with the answers is a greatly appreciated.

Here is my code

public class MainActivity extends Activity {

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

        ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> list = activityManager.getRunningAppProcesses();


        StringBuilder info = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            info.append(list.get(i).processName + "\n");
        }
        ArrayAdapter<StringBuilder> adapter = new ArrayAdapter<StringBuilder>(this,android.R.layout.simple_list_item_1, info);
        ListView listView = (ListView) findViewById(R.id.listView1);
        listView.setAdapter(adapter);

   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.menu_main, menu);

       return true;
   }
}

Solution

  • there is not ArrayAdapter's constructor that takes a StringBuilder as parameter. Use an ArrayList

    ArrayList<String> info = new ArrayList<>();
    for (ActivityManager.RunningAppProcessInfo p : list) {
       info.add(p.processName);
    }
    

    Should do it.

    Edit:

    you should also be using

    ArrayAdapter<String> instead of ArrayAdapter<StringBuilder>