如何将setListAdapter充气到主布局中?

我试图创建一个从服务器抓取的业务列表,并在列表视图中的搜索框下方显示它们。

我正在使用setListAdapter来调用我发送数组的数组Adapter类。 当我运行代码时,它会创建一个新的屏幕,并在结果中显示。我希望在同一屏幕上显示结果。

这是我的主要布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#FF9900"
android:textColor="#000000"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">

    <ImageView  
    android:layout_width="fill_parent" 
    android:layout_height="60px" 

    android:scaleType="fitXY"
    android:src="@drawable/logo" />

<RelativeLayout  android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:id="@+id/rel1" android:gravity="right">
    <AutoCompleteTextView android:id="@+id/autocomplete_classif"
        android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true"/>
    <Button android:id="@+id/button1" android:text="Search" android:onClick="myClickHandler" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentRight="true"></Button>

</RelativeLayout>


<EditText android:layout_height="wrap_content" android:id="@+id/editText2" 
android:layout_gravity="center_horizontal" android:text="" android:layout_width="match_parent" android:visibility="gone">
</EditText>
    <TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:id="@+id/mylocation"
    android:lines="1" android:textColor="#000000" android:gravity="center"
    android:scrollbars="vertical">
</TextView>

<ProgressBar android:id="@+id/progressBar1" android:layout_width="wrap_content" 
android:layout_gravity="center_horizontal" android:layout_height="wrap_content" 
style="?android:attr/progressBarStyleHorizontal" android:visibility="gone"> </ProgressBar>


    <TextView android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:id="@+id/pagetext" android:lines="50"
        android:textColor="#000000"
        android:background="#CCCCCC"
        android:padding="5px"
        android:scrollbars="vertical">
    </TextView>




</LinearLayout>

这里是我正在充气的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:padding="10px"
    android:layout_height="140px" android:id="@+id/rlt_main"
    android:background="#FFFFFF"
    android:textColor="#000000">

    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/bus_name"
        android:text="Name" ></TextView>

    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/description" 
        android:layout_below="@+id/bus_name" android:layout_marginLeft="10px"></TextView>

    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/distance" 
        android:layout_below="@+id/description" android:layout_marginLeft="10px"></TextView>

    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/longitude" 
        android:layout_below="@+id/distance" android:layout_marginLeft="10px"></TextView>

    <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:layout_centerVertical="true"
        android:id="@+id/iv_forward" android:background="@drawable/forward_arrow"
        android:layout_alignParentRight="true"></ImageView>

</RelativeLayout>

这是我整理数据并将其发送给我的课程的方式:

            if(found) {
            jArray = new JSONObject(result);
            JSONArray  jResult = jArray.getJSONArray("result");

            StringBuilder output = new StringBuilder();
            ArrayList<ArrayList<String>> varray = new ArrayList<ArrayList<String>>();
                for(int i=0;i < jResult.length();i++){    
                    JSONObject e = jResult.getJSONObject(i);

                    output.append(e.getString("webid") + "n");

                    output.append(e.getString("webDistance") + "n");

                    String longi = e.getString("webLongtitude");

                    String lati = e.getString("webLatitude");
                    String geoURI = String.format("geo:%s,%s", lati, longi);   
                    output.append(geoURI+"n");

                    output.append("--------------------------------------------n");
                    ArrayList<String> det = new ArrayList<String>();
                    det.add(e.getString("webEntryName"));
                    det.add(e.getString("webAddress"));
                    det.add(e.getString("webDistance"));
                    det.add(e.getString("webLongtitude"));
                    det.add(e.getString("webLatitude"));
                    varray.add(det);

                }

                setListAdapter(new busListAdapter(this, varray ));
                               }

这是arrayAdapter类:

package com.dentons.dentonsweb;

import java.util.ArrayList;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class busListAdapter extends ArrayAdapter<ArrayList<String>> {
    private final Activity context;
    private final ArrayList<ArrayList<String>> varray;  
    private  ArrayList<String> varray2;

    public busListAdapter(DentonswebActivity context, ArrayList<ArrayList<String>> varray) {
        super(context, R.layout.business_list_item, varray);
        this.context = context;
        this.varray = varray;
    }



    // static to save the reference to the outer class and to avoid access to
    // any members of the containing class
    static class ViewHolder {
        public ImageView imageView;
        public TextView textView;
    }

    @Override

        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();
            View row=inflater.inflate(R.layout.business_list_item, parent, false);

            TextView label=(TextView)row.findViewById(R.id.bus_name);
            TextView description=(TextView)row.findViewById(R.id.description);
            TextView distance=(TextView)row.findViewById(R.id.distance);
            TextView longitude=(TextView)row.findViewById(R.id.longitude);

        varray2 = varray.get(position);

        label.setText(varray2.get(0));
        description.setText(varray2.get(1));
        distance.setText(varray2.get(2));
        longitude.setText(varray2.get(3));

        return row;
    }
}

如果我能找到一种方法来告诉布局膨胀到主体,这将是很好的,但我似乎无法从这个类中获得对main的引用。 我管理的最好的办法是在第一个屏幕内发生通货膨胀,但没有结果。 我不记得我是怎么做到的。 我对Java很陌生。


这是最新的代码:

这出现在main.xml TextView android:layout_width =“fill_parent”android:layout_height =“fill_parent”android:id =“@ + id / pagetext”android:lines =“50”android:textColor =“#000000”android:background =“#CCCCCC”android:padding =“5px”android:scrollbars =“vertical”> / TextView>

这是新的busListAdapter:

package com.dentons.dentonsweb;

import java.util.ArrayList;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class busListAdapter extends ArrayAdapter<ArrayList<String>> {
    private final Activity context;
    private final ArrayList<ArrayList<String>> varray;  
    private  ArrayList<String> varray2;

    public busListAdapter(DentonswebActivity context, ArrayList<ArrayList<String>> varray) {
        super(context, R.layout.business_list_item, varray);
        this.context = context;
        this.varray = varray;
    }



    // static to save the reference to the outer class and to avoid access to
    // any members of the containing class
    static class ViewHolder {
        public ImageView imageView;
        public TextView textView;
    }

    @Override

        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();
            View row=inflater.inflate(R.layout.business_list_item, parent, false);

            TextView label=(TextView)row.findViewById(R.id.bus_name);
            TextView description=(TextView)row.findViewById(R.id.description);
            TextView distance=(TextView)row.findViewById(R.id.distance);
            TextView longitude=(TextView)row.findViewById(R.id.longitude);

        varray2 = varray.get(position);

        label.setText(varray2.get(0));
        description.setText(varray2.get(1));
        distance.setText(varray2.get(2));
        longitude.setText(varray2.get(3));

        return row;
    }
}

这是调用代码:

                ViewStub stub = (ViewStub) findViewById(R.id.viewStub1);
                stub.inflate();

                setListAdapter(new busListAdapter(this, varray ));

任何想法为什么这仍然在空白页面上打开。


您可以使用ViewStub创建布局。 您将ViewStub放置在您希望布局膨胀的主布局中,并根据需要设置参数。
例:

 <ViewStub android:id="@+id/stub"
           android:inflatedId="@+id/newId"
           android:layout="@layout/layoutName"
           android:layout_width="match_parent"
           android:layout_height="140dp" />

这将膨胀到layout / layoutName.xml中定义的布局。 当你想膨胀视图时,你会找到存根,然后调用它的inflate()方法:

ViewStub stub = (ViewStub) findViewById(R.id.stub);
stub.inflate();

现在新的布局是以前的存根,你可以找到你的列表并在其上设置适配器:

ListView list = (ListView) findViewById(R.id.listId);
list.setAdapter(yourAdapter);

注意:没有必要使用ViewStub创建一个列表,它在这里被简单地用作与原始问题相关的膨胀列表视图,尽管你描述的问题是因为你使用ListActivity而不是Activity(见下文) 。

您还应该将活动更改为正常的活动而不是ListActivity(或根据文档指南更改布局),因为ListActivity旨在将列表作为唯一的显示元素,这就是您的自定义布局被替换为现在列表。

ListActivity的默认布局由屏幕中央的单个全屏列表组成。 但是,如果您愿意,可以通过在onCreate()中使用setContentView()设置您自己的视图布局来自定义屏幕布局。 要做到这一点,你自己的视图必须包含一个ID为“@android:id / list”的ListView对象(或者如果它在代码中的话)

我希望这会清理一些事情。

链接地址: http://www.djcxy.com/p/93245.html

上一篇: How to inflate setListAdapter into main layout?

下一篇: Android Custom View Size