2012-12-01 71 views
0

我有Android中的代碼獲取列表中包含每個列表項的列表中的聯繫人複選框。現在我想在屏幕底部添加一個按鈕來執行一些操作。但是當我添加它與每個列表項目顯示的按鈕。我只需要一次在底部。 這是我的活動。android相對於充氣器佈局的佈局問題

package com.exercise.me; 

import java.util.ArrayList; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.CompoundButton.OnCheckedChangeListener; 
import android.widget.ListView; 


public class ContactList extends ListActivity { 
    /** Called when the activity is first created. */ 

    private ArrayList<contact> contact_list = null; 
    private ProgressDialog mProgressDialog = null; 
    private contactAdapter mContactAdapter = null; 
    private Runnable mViewcontacts = null; 
    //final Button btnPost = (Button)this.findViewById(R.id.btnPost); 

    private ArrayList<contact> items; 
    boolean[] isChecked; 
    Cursor mCursor; 
    ListView lv; 
    CheckBox cb; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listview); 

     contact_list = new ArrayList<contact>(); 
     lv = getListView(); 

     mViewcontacts = new Runnable() { 
      public void run() { 
       getContacts(); 
      } 
     }; 

     Thread thread = new Thread(null, mViewcontacts, "ContactReadBackground"); 
     thread.start(); 
     mProgressDialog = ProgressDialog.show(ContactList.this, "Please Wait...", "Retriving Contacts...", true); 


    } 

    @SuppressWarnings("unused") 
    private void getContacts() { 

     try { 

      String[] projection = new String[] { 
        ContactsContract.Contacts.DISPLAY_NAME, 
        ContactsContract.Contacts.HAS_PHONE_NUMBER, 
        ContactsContract.Contacts._ID }; 

      mCursor = managedQuery(ContactsContract.Contacts.CONTENT_URI, 
        projection, ContactsContract.Contacts.HAS_PHONE_NUMBER + "=?", new String[] { "1" }, 
        ContactsContract.Contacts.DISPLAY_NAME); 

      while (mCursor.moveToNext()) { 
       contact contact = new contact(); 

       String contactId = mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID)); 
       contact.setContactName(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); 
       contact_list.add(contact); 
      } 
      isChecked = new boolean[mCursor.getCount()]; 

      for (int i = 0; i < isChecked.length; i++) { 
       isChecked[i] = false; 
      } 

      this.mContactAdapter = new contactAdapter(this, R.layout.listview, contact_list); 
      lv.setAdapter(this.mContactAdapter); 
      mCursor.close(); 

      runOnUiThread(returnRes); 

     } catch (Exception e) { 
      Log.d("getContacts", e.getMessage()); 
     } 
    } 

    public class contactAdapter extends ArrayAdapter<contact> { 

     public contactAdapter(Context context, int textViewResourceId, ArrayList<contact> items1) { 
      super(context, textViewResourceId, items1); 
      items = items1; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 

      LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = vi.inflate(R.layout.listview, parent, false); 
      cb = (CheckBox) convertView.findViewById(R.id.checkBox); 



      if (isChecked[position] == true) 
       cb.setChecked(true); 
      else 
       cb.setChecked(false); 
      cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

       public void onCheckedChanged(CompoundButton buttonView, boolean ischecked) { 
        if (buttonView.isChecked()) 
         isChecked[position] = true; 
        else 
         isChecked[position] = false; 
       } 
      }); 

      contact contacts = items.get(position); 
      if (contacts != null) { 
       if (cb != null) { 
        cb.setText(contacts.getContactName()); 
       } 
      } 

      return convertView; 
     } 
    } 


    private Runnable returnRes = new Runnable() { 

     public void run() { 
      if (mProgressDialog.isShowing()) 
       mProgressDialog.dismiss(); 
      mContactAdapter.notifyDataSetChanged(); 
     } 
    }; 

} 

這是XML它

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 

     <CheckBox 
     android:id="@+id/checkBox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="14dp" 
     android:textSize="25sp" /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 

    </ListView> 



</RelativeLayout> 

PLZ給我的想法如何添加一個在屏幕的底部。通過點擊那個單一的按鈕,我希望通過HTTP發佈所有選中的項目在服務器上。

+0

將您的按鈕放在R.layout.listview的列表視圖中 – HannahMitt

+0

我試試。但每個項目都顯示按鈕。我只需要它一次 –

回答

0

要在您的視圖getView(final int position, View convertView, ViewGroup parent)函數中實現此功能,您必須檢查最後一個索引,然後使其中僅包含一個按鈕的第二個佈局充氣。簡單:)

更新

這裏是您當前的getView()充氣代碼

LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
convertView = vi.inflate(R.layout.listview, parent, false); 

現在把如果這一代碼像這種情況,並膨脹第二佈局如果當前指數你的最後一個索引列出您的ListAdabper

LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if(position != AdapterList.size()){ 

     convertView = vi.inflate(R.layout.listview, parent, false);} 
     else{ 

     convertView = vi.inflate(R.layout.your_button_layout, parent, false); 
    } 

設置也把你所有的CUR在if條件下的getView()的條件以及button的代碼在else的條件下

+0

PLZ可以解釋它更多。與一些代碼 –

+0

thanx ......... imran bhai –

+0

如果有任何答案對您有用,那麼您應該將其標記爲有用 –