multiple listview inside listfragment

2020-03-28 04:31发布

问题:

I have been working on trying to implement two listviews inside a list fragment, I have stated two list views in my xml and tried to set two seperate sets of data in the java file but the list view data intended for the first lisview is overwritten by the second.

How would I be able to point it to the correct listviews using the code below?

Java for fragment where list should go:

package com.owais.shopsellswap;

import java.util.ArrayList;
import java.util.HashMap;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SimpleAdapter;

public class Fragment_My_Profile extends ListFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View myProfileView = inflater.inflate(R.layout.fragment_my_profile, container, false);


        return myProfileView;
    }

    // Store Arralist as hashmaps for the listview
        ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
        ArrayList<HashMap<String,String>> list2 = new ArrayList<HashMap<String,String>>();
        // SimpleAdapter (listViewAdapter) links the array to the listview 
        private SimpleAdapter listViewAdapter;
        private SimpleAdapter listViewAdapter2;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            //HashMap links each line of data to the correct TextView
            HashMap<String,String> item;
            for(int i=0;i<userInfo.length;i++){
              item = new HashMap<String,String>();
              item.put( "line1", userInfo[i][0]);
              item.put( "line2", userInfo[i][1]);
              list.add( item );
            }

            HashMap<String,String> item2;
            for(int i=0;i<ListingsArray.length;i++){
              item2 = new HashMap<String,String>();
              item2.put( "line1", ListingsArray[i][0]);
              item2.put( "line2", ListingsArray[i][1]);
              item2.put( "line3", ListingsArray[i][2]);
              list2.add( item2 );
            }


            listViewAdapter = new SimpleAdapter(getActivity(), list,                    
                    R.layout.listview_layout_1,
                    new String[] { "line1","line2" },
                    new int[] {R.id.line_a, R.id.line_b});

            listViewAdapter2 = new SimpleAdapter(getActivity(), list2,
                    R.layout.listview_layout_3,
                    new String[] { "line1","line2", "line3" },
                    new int[] {R.id.line_a1, R.id.line_b1, R.id.line_c1});

            setListAdapter(listViewAdapter);
            setListAdapter(listViewAdapter2);

        }

        private String[][] userInfo =
            {{"User","Dummy"},
            {"Email Address","Dummy@dummymail.com"},
            {"User Type","Staff"},
            {"Contact Number","07111111111"}};

        private String[][] ListingsArray =
            {{"audi a3","brand new audi a3 with alloywheels, cd player", "£11000"},
            {"HTC One x","brand new android smartphone", "£450"},
            {"Acer Laptop","Acer Laptop with windows 7", "£300"},
            {"Sunglass","Oakley Sunglasses in great condition", "£100"}};
    }

xml for the fragment:

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

    <TextView
        android:id="@+id/textView2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/lightgrey"
        android:text="@string/userInfoHeader"
        android:textSize="15sp"
        android:textStyle="bold" />

    <ListView
        android:id="@+id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="184dp"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView2" >
    </ListView>

    <TextView
        android:id="@+id/textView3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/android:list"
        android:background="@color/lightgrey"
        android:text="@string/listingsHeader"
        android:textSize="15sp"
        android:textStyle="bold" />

    <ListView
        android:id="@+id/android:list2"
        android:layout_width="fill_parent"
        android:layout_height="184dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true" >
    </ListView>

</RelativeLayout>

The list view also uses a custom layout for each list.

回答1:

You need to set the two adapters accordingly with each ListView....

ListView list = (ListView)findViewById(R.id.list);
ListView list2 = (ListView)findViewById(R.id.list2);

list.setAdapter(...)
list2.setAdapter(...)

...however you do not have two ListViews in play. In using a ListFragment each time you call setAdapter you are setting a single ListView to the given contents. You would need to adjust your ListFragement to be that of a Fragment and have two separate ListViews within the Fragment, then set each with its own adapter as mentioned above.



回答2:

setListAdapter assumes the default target. To set the second adapter you need to find the second listview id and then set the second adapter to it.

listview = findViewById(R.id.list2);
listview.setAdapter(adapter2);

Note that a listfragment usually expects only a single list so the above.might not work, you may need to just use a regular fragment and do the above.for both lists.