2016-03-02 112 views
0

從此活動中,我從textField獲取文本並將其顯示在ListView中。 現在我想添加listView單元格中每個條目的複選框,並且還想知道如何在單個ListView單元格中顯示多個文本。 幫助代碼將不勝感激。 這裏是我的代碼....如何在listView中的每個條目上顯示覆選框

public class AfterRegister extends AppCompatActivity 
{ 
    ListView listView; 
    EditText editText; 
    Button insertItemButton; 
    ArrayList<String> arrayList = new ArrayList<String>(); 
    ArrayAdapter<String> adapter; 
    CheckBox checkBox; 

    StoreRegistrationDataBase storeRegistrationDataBase; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_after_register); 
     storeRegistrationDataBase = new StoreRegistrationDataBase(this); 
     storeRegistrationDataBase = storeRegistrationDataBase.open(); 

     checkBox = (CheckBox) findViewById(R.id.checkbox); 

     insertItemButton = (Button) findViewById(R.id.button4); 
     insertItemButton.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       editText = (EditText) findViewById(R.id.editText2); 
       listView = (ListView) findViewById(R.id.listView); 
       String getEditTextString = editText.getText().toString(); 

       if(isAlphaNumeric(getEditTextString)) 
       { 
        if(!getEditTextString.equals("")) 

        { 
         arrayList.add(getEditTextString); 

         adapter = new ArrayAdapter<String>(getBaseContext(), R.layout.text_view_layout, R.id.achView1, arrayList); 
         listView.setAdapter(adapter); 



         adapter.notifyDataSetChanged(); 
         editText.setText(""); 

        } 
        else 
        { 
         Toast.makeText(AfterRegister.this, "You can not insert empty field", Toast.LENGTH_SHORT).show(); 
        } 
       } 
       else 
       { 
        Toast.makeText(AfterRegister.this, "Remove Space", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
     listView.setOnTouchListener(new View.OnTouchListener() 
     { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) 
      { 

       return false; 
      } 
     }); 
    } 

    public boolean isAlphaNumeric(String s) 
    { 
     String pattern= "^[a-zA-Z0-9]*$"; 
     if(s.matches(pattern)) 
     { 
      return true; 
     } 
     return false; 
    } 
} 
+0

而不是陣列適配器,您需要編寫自定義列表視圖適配器。查看有關適配器的文檔http://developer.android.com/reference/android/widget/Adapter.html –

+0

http://www.androidinterview.com/android-custom-listview-with-checkbox-example/ – USKMobility

+0

嗨穆罕默德汗@Ameya Kulkarni建議您需要編寫一個自定義適配器來完成此操作。 [示例](http://www.mysamplecode.com/2012/07/android-listview-checkbox-example.html)我認爲這是你可能想要的 –

回答

2

你必須使用一個BaseAdapter和一些getter/setter方法在你的列表視圖中的每一項添加多個文字/圖像/其他UI元素。

你必須實現多個東西才能得到這個結果。它們是 -

  1. 爲ListView的每個項目創建一個自定義佈局。

listview_item_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 

    <TextView 
     android:id="@+id/layout_textview1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="15sp" 
     android:layout_marginRight="5dip" 
     android:textStyle="bold"/> 

    <TextView 
     android:id="@+id/layout_textview2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="15sp" 
     android:layout_marginLeft="5dip" 
     android:textStyle="bold"/> 

      <CheckBox 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/checkbox" 
      android:text="Test"/> 

</LinearLayout> 
  • 創建自定義類和添加一些getter/setter方法。
  • ListRowItem.java

    public class ListRowItem implements Serializable{ 
    String carrier,number; 
    
    public String getCarrier(){ 
        return carrier; 
    } 
    
    public String getNumber(){ 
        return number; 
    } 
    
    public void setCarrier(String ba_carrier){ 
        carrier = ba_carrier; 
    } 
    
    public void setNumber(String ba_number){ 
        number = ba_number; 
    } 
    } 
    
  • 創建自定義類和擴展類BaseAdapter。

    public class MyBaseAdapter extends BaseAdapter { 
    
    public Context ba_context; 
    public ArrayList<ListRowItem> listitem = new ArrayList<>(); 
    public LayoutInflater inflater; 
    ListRowItem currentlistitem; 
    
    public MyBaseAdapter(Context ma_context, ArrayList<ListRowItem> ma_listitem) { 
    super(); 
    this.ba_context = ma_context; 
    this.listitem = ma_listitem; 
    
    inflater = (LayoutInflater) ba_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    
    @Override 
    public int getCount() { 
    return this.listitem.size(); 
    } 
    
    @Override 
    public Object getItem(int position) { 
    return this.listitem.get(position); 
    } 
    
    @Override 
    public long getItemId(int position) { 
    return (long) position; 
    } 
    
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View vi = convertView; 
    
    if (convertView == null) 
        vi = inflater.inflate(R.layout.listview_item_layout, parent, false); 
    
    TextView carrier = (TextView) vi.findViewById(R.id.layout_textview1); 
    TextView number = (TextView) vi.findViewById(R.id.layout_textview2); 
    
    currentlistitem = listitem.get(position); 
    
    String str_carrier = currentlistitem.getCarrier(); 
    String str_number = currentlistitem.getNumber(); 
    
    carrier.setText(str_carrier); 
    number.setText(str_number); 
    
    return vi; 
    } 
    } 
    
  • 最後,填充ArrayList並在您的MainActivity中設置適配器。

    ArrayList<ListRowItem> listitem = new ArrayList<>(); 
    Context context = TestActivity.this; 
    MyBaseAdapter baseAdapter; 
    
    ListRowItem lr = new ListRowItem(); 
    lr.setNumber(number); 
    lr.setCarrier(carrier); 
    
    listitem.add(lr); 
    
    baseAdapter = new MyBaseAdapter(context,listitem); 
    
    setContentView(R.layout.activity_test); 
    listView = (ListView) findViewById(R.id.list_view); 
    listView.setAdapter(baseAdapter); 
    
  • 希望這有助於!

    +0

    thanx ...但如何在每個ListView條目上添加複選框? –

    +0

    您必須在定義ListView中每個項目的佈局的XML中添加複選框。這是我在第一點中添加的。請檢查我編輯的第一點。 –

    +0

    Thanx夥計讓我試試... –

    相關問題