2011-09-21 46 views
0

我有一个ListView。每个ListItem都有三个TextViews。如何从多个来源填充一个ListView?

<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> 

现在,我有三个ArrayList对象。假设那三个已经被加载了。我有一个解析器已经这从一个单一的数组列表三个数组列表!

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

我想将这些ArrayList加载到List视图中。我制作了预期产出的模型。

Mockup for what I'm trying to do

对此有任何解决方案?我试图在同一个ListView上一个接一个地设置ListAdapter,但看起来并不奏效。 谢谢。

+0

我编辑了我的答案..检查出来。 – Venky

+0

嗨Venky,我根据你和blessenm的代码起草了蓝图。你可以检查一下:http://pastie.org/2578299? –

+0

你得到任何错误吗? – Venky

回答

1

尝试添加值类和访问it.Here是一些片断

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; 
} 

}

对于充气布局deal_list.xml:

创建文本视图与标识为text1的布局。

试试这个,让我知道如果你发现任何困难。

谢谢Venky ..

+0

嗨Venky,我认为你的代码有一些错误。您只使用一个字符串来适应视图。我试图将你的和blessenm的想法一起使用。 谢谢 –

1

你应该通过扩展baseadapter创建自定义适配器。

而且我会创建一个数据结构类

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

然后我会创建数据对象的数组列表像

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

而且通过DATAS到自定义适配器创建列表。有很多自定义适配器的教程。

0

您可以使用BaseAdapter实现此行为。

您只需要自己处理getItem(),getCount()等方法,以正确确定从给定位置(从正确的资源)获取您的项目时的正确源(列表或其他)。

另一方面,您可以从两个数据源中创建一个具有所需数据的元类,并将该类的实例传递给适配器。