2017-08-04 46 views
1

我想限制在我的列表視圖選定的複選框只有3個選定的項目,我想禁用任何點擊另一個列表,如果選定的框已經是3.如何做到這一點?如何限制ListView中選中的複選框?

我一直試圖解決它基於非常類似的問題的答案。但它仍然沒有工作。所有的代碼將變成錯誤
無法解析方法「setOnItemSelectedListener」

這裏是我的代碼second.java我迄今爲止所做的類。以這種方式

package com.example.imah.uid; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.SparseBooleanArray; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.CheckedTextView; 
import android.widget.ListView; 
import android.widget.Toast; 

public class second extends AppCompatActivity { 

    ListView listview ; 
    String[] pStyle = new String[] { 
      "Fashion", 
      "HDR", 
      "Hi Speed", 
      "Landscape", 
      "Portrait", 
      "Street", 
      "Wedding" 

    }; 

    SparseBooleanArray sparseBooleanArray ; 
    private int numberOfCheckboxesChecked; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 

     listview = (ListView)findViewById(R.id.listView2); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String> 
       (second.this, 
         android.R.layout.simple_list_item_multiple_choice, 
         android.R.id.text1, pStyle); 

     listview.setAdapter(adapter); 

     listview.setOnItemSelectedListener(new onItemSelectedListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked && numberOfCheckboxesChecked >= 4) { 
        checkbox1.setChecked(false); 
       } else { 

        if (isChecked) { 
         numberOfCheckboxesChecked++; 
        } else { 
         numberOfCheckboxesChecked--; 
        } 
       } 
      } 
     }); 

    } 
} 

回答

0

試試這個:

public class Second extends AppCompatActivity { 

    ListView listview; 
    String[] pStyle = new String[]{ 
      "Fashion", 
      "HDR", 
      "Hi Speed", 
      "Landscape", 
      "Portrait", 
      "Street", 
      "Wedding" 

    }; 
    private static final int MAX_SELECTABLE = 3; 
    List<String> mSelected = new ArrayList<>(); 

    SparseBooleanArray sparseBooleanArray; 
    private int numberOfCheckboxesChecked; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 

     listview = (ListView) findViewById(R.id.listView2); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String> 
       (this, 
         android.R.layout.simple_list_item_multiple_choice, 
         android.R.id.text1, pStyle); 

     listview.setAdapter(adapter); 

     listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) { 
       CheckedTextView ctv = (CheckedTextView) view; 
       if (ctv.isChecked()) { 
        mSelected.remove(pStyle[pos]); 
        ctv.setChecked(false); 
       } else if (mSelected.size() < MAX_SELECTABLE) { 
        mSelected.add(pStyle[pos]); 
        ctv.setChecked(true); 
       } else { 
        Toast.makeText(Second.this, "You can\'t select more than " + MAX_SELECTABLE + " items", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
    } 
} 
+0

謝謝你,但仍然有錯誤就這一行listview.setOnItemClickListener的原因((adapterView,view,pos,id) - > { –

+0

@ImahAmmran我已經更新了,現在應該可以工作了,我已經添加了一些代碼,因爲您需要手動更改已選中狀態 – Eselfar

+0

android studio無法解析adapterView,view,pos,id。我可以知道如何聲明這些變量嗎? –

-1

使用:

 ArrayAdapter<String> adapter = new ArrayAdapter<String> 
       (second.this, 
         android.R.layout.simple_list_item_multiple_choice, 
         android.R.id.text1, pStyle); 

     listview.setAdapter(adapter); 

     listview.setOnItemSelectedListener(new onItemSelectedListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

        if (isChecked) { 
if(numberOfCheckboxesChecked=>4){ 
checkbox1.setChecked(false); 
} 
else{ 
numberOfCheckboxesChecked++; 
} 


        } else { 
         numberOfCheckboxesChecked--; 
        } 
       } 
      } 
     }); 

    } 
} 
+0

嘿,我知道你爲什麼downvote –