How do I create a working ListView in Android?
I am not looking for you to just fix my code, but am looking for a simple working example of a ListView in Android so I can understand the process of creating one and working with it. But I have included my code so you can see where I am coming from and what I have been trying.
I have done the following and had no success:
--
Made a xml layout with only a TextView item in it:
<?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="fill_parent"
    android:id="@+id/dir_text_view"
    />
Created the following class as per the instructions at the following tutorial: http://www.vogella.com/tutorials/AndroidListView/article.html
public class DataTempleArrayAdapter extends ArrayAdapter<String> {
HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();
public DataTempleArrayAdapter(Context context, int textViewResourceId,
                          List<String> objects) {
    super(context, textViewResourceId, objects);
    for (int i = 0; i < objects.size(); ++i) {
        mIdMap.put(objects.get(i), i);
    }
}
@Override
public long getItemId(int position) {
    String item = getItem(position);
    return mIdMap.get(item);
}
@Override
public boolean hasStableIds() {
    return true;
}
}
And in the main activity I have a snippet of code where I attempt to add a list of strings to the ArrayList associated with the DataTempleArrayAdapter here:
int i;
for (i=0;i<dirContents.length;i++) {
    dirList.add(dirContents[i]);
    //Toast.makeText(this, dirList.get(i), Toast.LENGTH_SHORT).show();
}
adapter.notifyDataSetChanged();
dirList is successfully populated, while the adapter doesn't update the ListView at all.
--
Before you ask for it, here I am including the rest of the relevant code:
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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="org.hacktivity.datatemple.MainActivity">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:hint="@string/directory"
    android:ems="10"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:id="@+id/dirEditText" />
    <Button
        android:text="→"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:id="@+id/dirButton"
        android:onClick="populateDirList" />
</LinearLayout>
<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:id="@+id/dirListView" />
</LinearLayout>
</RelativeLayout>
And alas the MainActivity class:
public class MainActivity extends AppCompatActivity {
ListView dirListView;
EditText et;
DataTempleArrayAdapter adapter;
ArrayList<String> dirList;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    dirListView = (ListView) findViewById(R.id.dirListView);
    et = (EditText) findViewById(R.id.dirEditText);
    dirList = new ArrayList<String>();
    dirListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            Toast.makeText(getApplicationContext(),
                    "Click ListItem Number " + position, Toast.LENGTH_LONG)
                    .show();
            populateDirList(view);
        }
    });
    ArrayList<String> dirList = new ArrayList<String>();
    adapter = new DataTempleArrayAdapter(this,
            R.id.dir_text_view, dirList);
    dirListView.setAdapter(adapter);
}
public void populateDirList (View view) {
    File f;
    // NO INPUT.
    if (et.getText().toString().equals("")) {
        Toast.makeText(this, "empty string", Toast.LENGTH_SHORT).show();
        return;
    }
    f = new File(et.getText().toString());
    if (f == null) { return; }
    String dirContents[] = f.list();
    if (dirContents == null) { return; }
    dirList = new ArrayList<String>(Arrays.asList(f.list()));
    adapter.clear();
    int i;
    for (i=0;i<dirContents.length;i++) {
        dirList.add(dirContents[i]);
        //Toast.makeText(this, dirList.get(i), Toast.LENGTH_SHORT).show();
    }
    adapter.notifyDataSetChanged();
}
}
 
     
     
     
    