2011-09-21 2 views
0

J'ai un ListView. Chaque ListItem a trois TextViews dedans.Comment remplir un ListView à partir de plusieurs sources?

<LinearLayout android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent"> 
    <LinearLayout android:id="@+id/linearLayout2" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:gravity="center"> 
     <ImageView android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:id="@+id/imageView1" 
      android:src="@drawable/icon" android:padding="5dip"> 
     </ImageView> 
     <TextView android:textAppearance="?android:attr/textAppearanceLarge" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:id="@+id/textView1" 
      android:padding="5dip" 
      android:text="First"> 
     </TextView> 
     <LinearLayout android:id="@+id/LinearLayout01" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_weight="1"> 
      <TextView android:id="@+id/textView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Second Text View" android:padding="5dip"> 
      </TextView> 
      <TextView android:id="@+id/textView3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Third Text View" 
       android:padding="5dip"> 
      </TextView> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 

Maintenant, j'avais trois objets ArrayList. Supposons que ces trois ont été chargés comme. J'ai déjà eu un analyseur qui fait trois listes de tableaux à partir d'une seule liste de tableaux!

["Main One","Main Two","Main Three","Main Four"] 
["Top One","Top Two","Top Three","Top Four"] 
["Bottom One","Bottom Two","Bottom Three","Bottom Four"] 

Je souhaite charger ces ArrayLists dans la vue Liste. J'avais fait une maquette de la sortie attendue.

Mockup for what I'm trying to do

Y at-il une solution pour cela? J'ai essayé de définir ListAdapter sur le même ListView l'un après l'autre, mais ne semble pas fonctionner du tout. Merci.

+0

J'ai édité ma réponse..Vérifiez-la. – Venky

+0

Salut Venky, j'ai rédigé un plan basé sur les vôtres et les codes de blessenm. Pouvez-vous vérifier cela: http://pastie.org/2578299? –

+0

Des erreurs? – Venky

Répondre

1

Essayez d'ajouter des valeurs à la classe et l'accès est it.Here quelques extraits

ContractTestActivity.java:

public class ContractTestActivity extends Activity { 
private List<Contract> contracts = new ArrayList<Contract>(); 
public final String TAG = "ContractTest"; 
//public Contract newContract = new Contract(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 
    ListView list; 
    list = (ListView)findViewById(R.id.mylist); 
    ArrayAdapter<Contract> adapter = new ContractAdapter(this, android.R.layout.simple_list_item_1, myContracts()); 
    list.setAdapter(adapter); 
} 

private List<Contract> myContracts(){ 

    List<Contract> list = new ArrayList<Contract>(); 

    list.add(new Contract("Friend1")); 

    return list; 
} 

}

Contract.java

public class Contract { 

private String name; 

public Contract(String name) { 
    this.name = name; 
} 
public String getName() { 
    return name; 
} 

}

ContractAdapter.java

public class ContractAdapter extends ArrayAdapter<Contract> { 


private List<Contract> contracts; 

public ContractAdapter(Context context, int view, List<Contract> passedContracts) { 
     super(context, view, passedContracts); 
     contracts = passedContracts; 
} 

@Override 
public int getCount() { 
    return contracts.size(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     View currentView = convertView; 
     LayoutInflater currentViewInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     currentView = currentViewInflater.inflate(R.layout.deal_list, null); 
     Contract currentContract = contracts.get(position); 
     TextView text = (TextView) currentView.findViewById(R.id.text1); 
     text.setText(currentContract.getName()); 
     return currentView; 
} 

}

Pour la mise en page Gonflé deal_list.xml:

Créer mise en page avec Vue du texte avec Id comme text1. Essayez ceci, faites le moi savoir si vous trouvez n'importe quelle difficulté.

Merci Venky ..

+0

Salut Venky, je pense que votre code a quelques erreurs. Vous utilisez une seule chaîne pour être adaptée à la vue. J'essaie d'utiliser les vôtres et les idées de bénédiction ensemble. merci –

1

Vous devez créer un adaptateur personnalisé en étendant le baseadapter.

Et je voudrais créer une classe de structure de données

public class Data { 
    String LeftMainString; 
    String RightTopString; 
    String RightBottomString; 
} 

Je voudrais créer un arraylist de l'objet de données comme

ArrayList<Data> datas= new ArrayList<Data>(); 

Et passer les données à l'adaptateur personnalisé pour créer la liste. Il existe de nombreux tutoriels pour l'adaptateur personnalisé.

0

Vous pouvez obtenir ce comportement en utilisant BaseAdapter. Vous n'avez besoin de gérer que les méthodes getItem(), getCount() etc. pour déterminer correctement la bonne source (liste ou autre) lors de l'extraction de votre élément pour la position donnée (à partir de la ressource correcte). D'autre part, vous pouvez créer une méta-classe ayant les données nécessaires à partir des deux sources de données et en passant les instances de cette classe à l'adaptateur.

Questions connexes