Search code examples
androidandroid-listviewlistadapter

Print lines in Listview using an adapter


I need to output data from lines cm1 and cm2 in a ListView, every time when I press the button. Line should be shown in various TextView.

Code TEST.java:

public String cm1;
public String cm2;

public class TEST extends Activity {
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MyList = (ListView) this.findViewById(R.id.listStrings);
         setListAdapter();

        // button
        Button setup = (Button) this.findViewById(R.id.send);
        setup.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
        cm1 = "cm1text";
        cm2 = "cm2text";
        //xxxx
        }
        });
}

// adapter
private void setListAdapter() {
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    R.layout.row //idknow what im must writehere to set cm1 string to cm1text tv
    List.setAdapter(adapter);
    }

Code TEST.xml:

<?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:orientation="vertical" >

<ListView
    android:id="@+id/listStrings"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="1" />

    <Button
        android:id="@+id/send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Send" />
</LinearLayout>

Code row.xml:

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

<TextView
    android:id="@+id/cm1tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/cm2tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</RelativeLayout>

Should look ListView after 2 clicks:

cm1
cm2
cm1
cm2

Solution

  • Maybe what you should/can do is have this;

    String cm = cm1 + "\n" + cm2
    

    Which should output;
    cm1
    cm2

    Then you change the xml to just have one textview and the adapter code as follows;

    ArrayList<String> listItems = new ArrayList<String>();
    ArrayAdapter<String> aa = new ArrayAdapter<String>(this, R.layout.row, R.id.textViewCM, listItems);
    yourListView.setAdapter(aa);
    

    Then, whenever you press the button;

    // ...code to initialise/change cm
    listItems.add(cm);
    aa.notifyDataSetChanged(); // notifies listView to update it's view
    

    That should do what you're after unless you've got to have the two individual textViews, in which case, you'll need to write a custom adapter, I've done a bit of a tutorial on my website if you follow that link.