2011-07-14 11 views
9

Próbuję ustawić Listview pod innymi widżetów (przyciski, editText, itp.). Nie chcę używać innej aktywności dla widoku listy. Po przeczytaniu niektórych znalazłem How can I implement a ListView without ListActivity? (use only Activity) i próbowałem to zrobić, kończąc: Oto moja main.xml:ListView bez ListActivity

<LinearLayout android:id="@+id/relativeLayout1" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="wrap_content" 
android:orientation="vertical"> 
<TextView ...[some code].../> 
<EditText ...[some code].../> 
<ImageButton ...[some code].../> 
<Chronometer ..[some code]..../> 
<ListView android:id="@+id/listView1" android:layout_height="wrap_content" 
    android:layout_width="fill_parent"></ListView> 

tutaj jest mój onCreate:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    button1 = (ImageButton) findViewById(R.id.button1); 
    mChronometer = (Chronometer) findViewById(R.id.chronometer1); 
    editText1 = (EditText) findViewById(R.id.editText1); 
    ListView lv = (ListView) findViewById(R.id.listView1); 
    String[] listword = new String[] {"Hello","World","Foo","Bar"}; 
    lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, listword)); 
    } 

i tutaj jest list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="10dp" 
android:textSize="16sp" > 
</TextView> 

Kiedy debuguję w moim urządzeniu fizycznym, t aplikacja po prostu pozostaje czarna. Jeśli skomentuję linie onCreate(), które dotyczą listy, aplikacja działa (oczywiście bez widoku listy). Wszelkie pomysły, co może być nie tak?

+0

Podejrzewasz, że widżety nie mogą zniknąć bez powodu. Spróbuj ustawić kolor tła dla różnych widżetów, aby zobaczyć, który z nich jest wyświetlany. –

+0

Poniższe informacje pojawiają się po usunięciu listy?

+0

Tak, kiedy usunąłem widok listy, wszystko pokazuje. – leonsas

Odpowiedz

16

Rzeczywiście mam aplikację z listview poniżej niektórych widoków tekstowych i powyżej dwóch przycisków, pozwól mi chwycić mój kod!

Oto moja działalność z ListView poniżej TextView i nad przyciskami (z dość trochę usunięte dla zwięzłość):

public class BNYDirectoryResults extends Activity{ 

    public static String[] stuff; 
    ListView list; 
    BNYAdapter adapter; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.resultscreen); 

     TextView headDisplay = (TextView)findViewById(R.id.results); 
     TextView headCount = (TextView)findViewById(R.id.resultsTotal); 
     TextView headPages = (TextView)findViewById(R.id.pages); 

     //Set up the results list, see BNYAdapter 
     list = (ListView)findViewById(R.id.list); 
     adapter = new BNYAdapter (this, BNYDirectory.ReturnResults); 
     list.setAdapter(adapter); 

     //Sets up header information (pages, total results) 
     //Just some stuff to change the TextViews 


     //Passes EmployeeID and Phone Number to AND opens the details page 
     list.setOnItemClickListener(new OnItemClickListener(){ 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
       String EID = BNYDirectory.ReturnResults[position][0]; 
       String phoneNumber = BNYDirectory.ReturnResults[position][2]; 

       BNYDirectoryTransaction.doDetails(EID, phoneNumber); 
       Intent i = new Intent(view.getContext(), BNYDirectoryDetails.class); 
       startActivity(i); 

      } 
     }); 
    } 
} 

tutaj jest plik XML dla niej:

<TextView 
     android:id="@+id/results" 
     android:text="Name" 
     android:gravity="center" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" android:textStyle="bold"/> 
    <TextView 
     android:id="@+id/resultsTotal" 
     android:text="Phone" 
     android:gravity="center" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" android:textStyle="bold"/> 
    <TextView 
     android:id="@+id/pages" 
     android:text="AIM" 
     android:gravity="center" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" android:textStyle="bold"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/name" 
     android:text="Name" 
     android:gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 
    <TextView 
     android:id="@+id/phone" 
     android:text="Phone" 
     android:gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 
    <TextView 
     android:id="@+id/aim" 
     android:text="AIM" 
     android:gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 
    <TextView 
     android:id="@+id/dept" 
     android:text="Dept" 
     android:gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 
    </LinearLayout> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1"/> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

    <Button 
     android:id="@+id/prevButton" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Previous" 
     android:layout_weight="1"/> 
    <Button 
     android:id="@+id/nextButton" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Next" 
     android:layout_weight="1"/> 

    </LinearLayout> 
</LinearLayout> 

i tutaj jest niestandardowy adapter do listy:

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

public class BNYAdapter extends BaseAdapter { 

    private Activity activity; 
    private String[][] results; 
    private static LayoutInflater inflater=null; 

    public BNYAdapter(Activity a, String[][]info) { 
     activity = a; 
     results = info; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public int getCount() { 
     return results.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public static class ViewHolder{ 
     public TextView name; 
     public TextView phone; 
     public TextView aim; 
     public TextView dept; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     ViewHolder holder; 
     if(convertView==null){ 
      vi = inflater.inflate(R.layout.item, null); 
      holder=new ViewHolder(); 
      holder.name=(TextView)vi.findViewById(R.id.nameItem); 
      holder.phone=(TextView)vi.findViewById(R.id.phoneItem); 
      holder.aim=(TextView)vi.findViewById(R.id.aimItem); 
      holder.dept=(TextView)vi.findViewById(R.id.deptItem); 
      vi.setTag(holder); 
     } 
     else 
      holder=(ViewHolder)vi.getTag(); 

     holder.name.setText(BNYDirectory.ReturnResults[position][1]); 
     holder.phone.setText(BNYDirectory.ReturnResults[position][2]); 
     holder.aim.setText(BNYDirectory.ReturnResults[position][3]); 
     holder.dept.setText(BNYDirectory.ReturnResults[position][4]); 
     return vi; 
    } 

} 

i całość, która tworzy stronę taką jak Look, a list with other stuff around it!

+0

Dzięki! Po prostu musiałem umieścić wszystko w innym LinerLayout – leonsas

+0

Cieszę się, że to działa. Wiem, że w niektórych moich aplikacjach prawdopodobnie mam zbyt wiele linelayouts. – Rob

-2

Możesz użyć własnego układu z ListActivity. Zwiększ aktywność ListActivity, utwórz własny layout i upewnij się, że ListView ma android:id="@android:id/list" (w ten sposób ListActivity łączy się z ListView w twoim własnym układzie), a następnie w onCreate ustaw swój układ na setContentView.

Powiązane problemy