Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从多个源填充一个ListView?_Java_Android_Xml - Fatal编程技术网

Java 如何从多个源填充一个ListView?

Java 如何从多个源填充一个ListView?,java,android,xml,Java,Android,Xml,我有一个列表视图。每个列表项中都有三个文本视图 <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

我有一个列表视图。每个列表项中都有三个文本视图

<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加载到列表视图中。我制作了一个预期产出的模型

有什么解决办法吗?我试着一个接一个地在同一个ListView上设置ListAdapter,但似乎根本不起作用。
谢谢。

如果我理解正确,那么3个ArrayList的组合会出错

也许这可以帮助你

还有Android开发者网站上的Hello ListView教程

您应该通过扩展baseadapter来创建自定义适配器

我将创建一个数据结构类

public class Data {
     String LeftMainString;
     String RightTopString;
     String RightBottomString;
}
然后我将创建一个数据对象的arraylist,如

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

并将数据传递给自定义适配器以创建列表。有很多关于自定义适配器的教程。

尝试向类中添加值并访问它。下面是一些代码片段

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

ContractAdapter.java

public class Contract {

private String name;

public Contract(String name) {
    this.name = name;
}
public String getName() {
    return name;
}
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;
}
公共类ContractAdapter扩展了ArrayAdapter{
私人名单合同;
公共契约适配器(上下文上下文、int视图、列表传递的契约){
超级(上下文、视图、传递的合同);
合同=通过的合同;
}
@凌驾
public int getCount(){
返回合同。size();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
查看当前视图=转换视图;
LayoutFlater currentViewInflater=(LayoutFlater)getContext().getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
currentView=currentViewInflater.inflate(R.layout.deal\u列表,空);
合同currentContract=合同.get(位置);
TextView text=(TextView)currentView.findViewById(R.id.text1);
setText(currentContract.getName());
返回当前视图;
}
}

对于充气布局deal_list.xml:


使用Id为text1的文本视图创建布局。

您可以使用BaseAdapter实现此行为

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


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

Hi Venky,我认为您的代码有一些错误。您只使用一个字符串来适应视图。我想把你和布莱森的想法结合起来。谢谢我编辑了我的答案。看看。嗨,文基,我已经根据你和布莱森的代码起草了一份蓝图。你能检查一下吗:?@Venki,我得到:,顺便说一句,我在AsyncTaks的postExecute中使用了setapater。
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;
}