1

我正在開發一個應用程序,其中包含自定義佈局arrayAdapter。我的自定義佈局由1個ImageView,2個textViews和1個複選框組成。帶複選框的ListView持有者

展臺圖像文件和文本存儲在值文件夾中的string.xml中。

enter image description here

所以我的問題是我不能得到正確的位置(索引),當我點擊複選框。我只想要一個Toast消息與複選框上的位置一起出現。

例如如果我點擊meme3複選框出現

讓我們看看一些代碼:

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

    Resources res = getResources(); 
    titles = res.getStringArray(R.array.titles); 
    descriptions = res.getStringArray(R.array.descriptions); 
    list = (ListView) findViewById(R.id.listView1); 

    MyAdapter adapter = new MyAdapter(this, titles, images, descriptions); 
    list.setAdapter(adapter); 
} 

這是我ArrayAdapter

class MyAdapter extends ArrayAdapter<String> implements OnCheckedChangeListener { 
    Context context; 
    int[] images; 
    String[] titlesArray, descrptionArray; 

MyAdapter(Context context, String[] titles, int[] images, String[] description) { 
    super(context, R.layout.single_row, R.id.textView1, titles); 
    this.context = context; 
    this.images = images; 
    this.titlesArray = titles; 
    this.descrptionArray = description; 
} 

class MyViewHolder { 
    ImageView myImage; 
    TextView myTitle; 
    TextView myDescription; 
    CheckBox box; 

    MyViewHolder(View v) { 
     myImage = (ImageView) v.findViewById(R.id.imageView1); 
     myTitle = (TextView) v.findViewById(R.id.textView1); 
     myDescription = (TextView) v.findViewById(R.id.textView2); 
     box = (CheckBox) v.findViewById(R.id.checkBox1); 
    } 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    MyViewHolder holder = null; 
    if (row == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.single_row, parent, false); 
     holder = new MyViewHolder(row); 
     row.setTag(holder); 
    } else { 
     holder = (MyViewHolder) row.getTag(); 
    } 
    holder.myImage.setImageResource(images[position]); 
    holder.myTitle.setText(titlesArray[position]); 
    holder.myDescription.setText(descrptionArray[position]); 
    holder.box.setOnCheckedChangeListener(this); 
    return row; 
} 

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    if(isChecked){ 
     int position = (Integer)buttonView.getTag(); 
     Toast.makeText(getContext(), ""+position, Toast.LENGTH_SHORT).show(); 
    } 
} 
} 

我的目錄有20個項目。現在,如果我檢查一個複選框,該應用程序會自動選擇其他2個複選框!請幫忙!

回答

1

您可以將位置設置爲複選框上的標記。

holder.box.setTag(position); 

和檢索你的聽衆有:

int position = (Integer)buttonView.getTag(); 
+0

抱歉,但我有一個問題!讓我們假設我的列表有20個項目。如果我點擊第1項,應用程序會自動選擇項目編號9和17!爲什麼? – andre

+0

它從Android的錯誤? – andre

+0

不需要在代碼中更改..一次我有同樣的問題。但我在最後修正了它.. – Meghna