Как раздуть setListAdapter в основной макет?

Я пытаюсь создать список предприятий, захваченных с сервера, и отобразить их под окном поиска в списке.

Я использую setListAdapter для вызова класса arrayAdapter, к которому я отправляю массив. Когда я запускаю код, он создает новый экран с параметрами. Мне нужны результаты на том же экране.

Вот мой основной макет:

<!--?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">
 

</autocompletetextview></relativelayout>



 

<progressbar android:id="@+id/progressBar1" android:layout_width="wrap_content" android:layout_gravity="center_horizontal" android:layout_height="wrap_content" 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>




</imageview></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">

 

 

 

 

 

</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 ));
 }
</string></string></arraylist<string></arraylist<string>

И это класс 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;
 }
}
</arraylist<string></string></arraylist<string></arraylist<string>

Если бы я мог найти способ рассказать макет, чтобы раздуть его в главном, это было бы здорово, но я, похоже, не смог получить ссылку на главную из этого класса. Лучшее, что мне удалось, - это то, что инфляция произойдет на первом экране, но без результата. Я не помню, как я это сделал. Я новичок в 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;
 }
}
</arraylist<string></string></arraylist<string></arraylist<string>

Это код вызова:

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

 setListAdapter(new busListAdapter(this, varray ));

Любые идеи, почему это все еще открывается на пустой странице.

1 ответ

Вы можете использовать ViewStub для создания макета. Вы размещаете ViewStub в главном макете, где хотите, чтобы ваш макет был раздутым, и задайте параметры так, как вы хотите. Пример:


Это будет завышено до макета, определенного в макете /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 имеет макет по умолчанию, который состоит из одного полноэкранного списка в центре экрана. Однако, если вы хотите, вы можете настроить макет экрана, установив собственный макет представления с помощью setContentView() в onCreate(). Для этого ваш собственный вид ДОЛЖЕН содержать объект ListView с идентификатором "@android: id/list" (или список, если он содержит код)

Надеюсь, это прояснит некоторые вещи.

licensed under cc by-sa 3.0 with attribution.