首先,我很抱歉我的英语不好,也许是因为我的愚蠢问题(我是新手)。 我想实现格式化为标题的选项面板。 所以这里是我的代码:
listview_item_row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp">
<ImageView
android:id="@+id/imgIcon"
android:contentDescription="option image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/imgIcon"
android:paddingLeft="15dp"
android:textSize="20sp" />
<TextView
android:id="@+id/txtSubText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/imgIcon"
android:layout_below="@id/txtText"
android:paddingLeft="15dp"
android:textSize="14sp" />
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/txtText" />
</RelativeLayout>
Row.java
public class Row {
public int icon;
public String text;
public String subtext;
public Row(){
super();
}
public Row(int icon, String text ,String subtext) {
super();
this.icon = icon;
this.text = text;
this.subtext = subtext;
}
}
RowAdapter.java
public class RowAdapter extends ArrayAdapter<Row>{
Context context;
int layoutResourceId;
Row data[] = null;
public RowAdapter(Context context, int layoutResourceId, Row[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View myRow = convertView;
RowHolder holder = null;
if(myRow == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
myRow = inflater.inflate(layoutResourceId, parent, false);
holder = new RowHolder();
holder.imgIcon = (ImageView)myRow.findViewById(R.id.imgIcon);
holder.txtText = (TextView)myRow.findViewById(R.id.txtText);
holder.txtSubText = (TextView)myRow.findViewById(R.id.txtSubText);
holder.checkBox = (CheckBox)myRow.findViewById(R.id.checkBox);
myRow.setTag(holder);
}
else
{
holder = (RowHolder)myRow.getTag();
}
Row row = data[position];
holder.txtText.setText(row.text);
holder.imgIcon.setImageResource(row.icon);
holder.txtSubText.setText(row.subtext);
return myRow;
}
static class RowHolder
{
ImageView imgIcon;
TextView txtText;
TextView txtSubText;
CheckBox checkBox;
}
}
现在,当我开始活动时,即使我已经充气,我也不显示任何复选框。我该如何解决这个问题?
另外,如果我可以利用这个问题,当我必须为复选框实现onClickListener时,我如何理解单击了哪个复选框? 我会做这样的事情:
...
Row row = data[position];
holder.txtText.setText(row.text);
holder.imgIcon.setImageResource(row.icon);
holder.txtSubText.setText(row.subtext);
holder.check..setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if ( isChecked )
{
// my code here
}
}
});
...
我认为“位置”是关键,但我不知道如何使用它。
答案 0 :(得分:0)
这是问题的开始!
我使用它并且有效
public class ImageAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public ImageAdapter() {
//Largeur des colonnes
LargeurCol = (int) ((largeurEcran / 4)-7);
System.out.println(LargeurCol);
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.galleryitem, null);
holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
holder.imageview.setLayoutParams(new RelativeLayout.LayoutParams(LargeurCol, LargeurCol));
holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox);
holder.checkbox.setButtonDrawable(R.drawable.checkbox);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.checkbox.setId(position);
holder.imageview.setId(position);
holder.checkbox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v;
int id = cb.getId();
if (thumbnailsselection[id]){
cb.setChecked(false);
thumbnailsselection[id] = false;
} else {
cb.setChecked(true);
thumbnailsselection[id] = true;
}
}
});
holder.imageview.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int id = v.getId();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");
startActivity(intent);
}
});
holder.imageview.setImageBitmap(thumbnails[position]);
holder.checkbox.setChecked(thumbnailsselection[position]);
holder.id = position;
return convertView;
}
}
class ViewHolder {
ImageView imageview;
CheckBox checkbox;
int id;
}
setLayoutParams不是将行大小调整到屏幕的义务。