简体   繁体   中英

How to add more than one textView to listView

I am using an custom adapter and I have the problem with getView method. Here is my code -

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View vi = convertView;
        if (vi == null)
            vi = inflater.inflate(R.layout.list_item, null);
     if(position==0){
        TextView text1 = (TextView) vi.findViewById(R.id.text1);
        text1.setText(data[position]);
     }else if(position==1){
        TextView text2 = (TextView) vi.findViewById(R.id.text2);
        text2.setText(data[position]);
      }
        return vi;
    }

and here is the XML file -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:background="@android:color/black"
    android:textColor="@android:color/white"
    android:id="@+id/text1" />
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAlignment="center"
    android:background="@android:color/green"
    android:textColor="@android:color/white"
    android:id="@+id/text2" />


</LinearLayout>

Actually my if command is working but the other blank textView also appears with it. Suppose If position==0 then "@+id/text1" should be displayed, but "@+id/text2" also get displayed with no text. I want only one textview to be displayed, not the other one. How to do that?

position is the index of the currently displayed item in the adapter, not which TextView is being displayed.

Each row of your Adapter has two TextViews, and I assume you have some string that needs to be displayed in both views.

As an example, try this instead.

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    String item = String.valueOf(data[position]);

    View v = convertView;
    if (v == null) {
        v = inflater.inflate(R.layout.list_item, null);
    }

    TextView text1 = (TextView) v.findViewById(R.id.text1);
    TextView text2 = (TextView) v.findViewById(R.id.text2);

    text1.setText("1: " + item);
    text2.setText("2: " + item);

    return v;
}

I want only one textview to be displayed, not the other one. How to do that?

Then it sounds like you don't want two TextViews in one layout...

If you question is literally "How to display more than one TextView in a ListView", then you should put more than one value into that data array.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM