Two views in each list item

前端 未结 2 1744
有刺的猬
有刺的猬 2021-01-15 14:35

I\'m trying to show two different views in each element of the list. Both vews are text views, but I want one of them to be enclosed in a square with a different color. I kn

相关标签:
2条回答
  • 2021-01-15 15:02

    You can create your own adapter for the list. The adapter is what decides how to display the items in the list.
    Here is an example:

    class MyAdapter extends ArrayAdapter<TheObjectsToPopulateYourList>{
            public MyAdapter(Context context, int textViewResourceId, ArrayList<TheObjectsToPopulateYourList]> objects) {
                super(context, textViewResourceId, objects);
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                if( convertView== null ) convertView = getLayoutInflater().inflate(R.layout.your_layout, null);
    
                TextView myTextView1 = (TextView)convertView.findViewById(R.id.yourFirstTextView);
                myTextView1.setText(getItem(position*2)); //getItem gets the item (String in this case) from the list we specified when creating the adapter.
                //position is the current position of the list, and since each position has two items, we have to multiply the position by 2 to get to the right item-list-position.
                TextView myTextView2 = (TextView)convertView.findViewById(R.id.yourSecondTextView);
                myTextView2.setText(getItem(position*2 +1 ));
                myTextView2.setBackgroundColor(0xFFFF00FF); //Any color. Use setBackgroundResource to use a resource object (drawable etc.)
    
                return convertView;
            }
        }
    

    And you also need the line-layout to contain all the elements you need (this is what will be displayed on each line of the list), let's call it 'thelinelayoutfile.xml' and put it in the layout folder:

    <?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="wrap_content"
        android:orientation="vertical"
        android:padding="15dp">
        <TextView 
            android:id="@+id/yourFirstTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
                android:text="line1"/>
        <TextView 
            android:id="@+id/yourSecondTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
                android:text="line2"/>
    </LinearLayout>
    

    Then when you initialize your list (in your onCreate() method, perhaps?) You call

    //You can create the list anywhere, or use an array.
    //I will create it here, just for the sake of demonstration.
    ArrayList<String> myLines = new ArrayList<String>();
    myLines.add("item1, line1");
    myLines.add("item1, line2");
    myLines.add("item2, line1");
    myLines.add("item2, line2");
    
    //set the list adapter:
    ListView myList = (ListView)findViewById(R.id.whateveryourlistidis);
    myList.setAdapter(new MyAdapter(this, R.layout.thelinelayoutfile, myLines));
    
    0 讨论(0)
  • 2021-01-15 15:05

    More details would help; my solution may not be accurate, as I don't know what you want very well.

    Check out the View element's background color: http://developer.android.com/reference/android/view/View.html#setBackgroundColor(int).

    If you have two views, and set the background colors to different values, you can get each view to have square around it. This may be able to create the desired effect.

    0 讨论(0)
提交回复
热议问题