如何将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