我正在尝试创建从服务器抓取的商家列表,并将其显示在列表视图中的搜索框下方。
我使用setListAdapter来调用我发送数组的arrayAdapter类。当我运行代码时,它会创建一个带有resuts的新屏幕。我想在同一个屏幕上显示结果。
这是我的主要布局:
<?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的方法,那将是很好的但我似乎无法从这个类中获得对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 ));
任何想法为什么这仍然在空白页面上打开。
答案 0 :(得分:1)
您可以使用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(见下文)。
您还应将活动更改为正常Activity而不是ListActivity(或根据documentation guidelines更改布局),因为ListActivity旨在将列表设为只显示元素,这就是为什么你的自定义布局现在被替换为列表。
ListActivity的默认布局由单个布局组成, 屏幕中央的全屏列表。但是,如果你愿意, 您可以通过设置自己的视图布局来自定义屏幕布局 在onCreate()中使用setContentView()。要做到这一点,你自己的观点必须 包含一个ID为“@android:id / list”的ListView对象(或列出if 它在代码中)
我希望这可以解决一些问题。