android-如何为我的ListView项目添加微调功能?
作者:互联网
我有一个自定义列表适配器.这里是:
public class FilesAdapter extends ArrayAdapter<PutioFileLayout> {
Context context;
int layoutResourceId;
List<PutioFileLayout> data = null;
public FilesAdapter(Context context, int layoutResourceId, List<PutioFileLayout> 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 row = convertView;
FileHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new FileHolder();
holder.textName = (TextView) row.findViewById(R.id.text_fileListName);
holder.textDescription = (TextView) row.findViewById(R.id.text_fileListDesc);
holder.imgIcon = (ImageView) row.findViewById(R.id.img_fileIcon);
row.setTag(holder);
} else {
holder = (FileHolder) row.getTag();
}
PutioFileLayout file = data.get(position);
holder.textName.setText(file.name);
holder.textDescription.setText(file.description);
holder.imgIcon.setImageResource(file.icon);
return row;
}
static class FileHolder {
TextView textName;
TextView textDescription;
ImageView imgIcon;
}
}
很短很甜.我在每一行的布局中都有Spinners,并且我希望用户能够单击它们,并为每个项目获取上下文菜单.如何在适配器中实现此功能?
我的row.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="64dp" >
<ImageView
android:id="@+id/img_fileIcon"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:scaleType="fitCenter"
android:src="@drawable/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/img_fileIcon"
android:orientation="vertical" >
<TextView
android:id="@+id/text_fileListName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginTop="12dp"
android:ellipsize="end"
android:maxLines="1"
android:text="File name"
android:textAppearance="?android:attr/textAppearanceMedium" />
<FrameLayout
android:id="@+id/descriptionFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginRight="30dp" >
<TextView
android:id="@+id/text_fileListDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="File description" />
</FrameLayout>
</LinearLayout>
<Spinner
android:id="@+id/item_fileSpinner"
android:layout_width="44dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/spinner_background_ab_putio" />
</RelativeLayout>
解决方法:
在您的getView()方法中,可以像以下那样获得微调器的引用:
Spinner spn = row.findViewById(R.id.item_fileSpinner);
一旦有了引用,就可以通过使用所有值创建一个SpinnerAdapter来设置其项目,并使用
spn.setAdapater(mSpinAdapter);
如果可以告诉我您希望使用哪些数据填充微调框,那么我可以为您提供一个有关如何创建和填充适配器的更具体的示例.
那么剩下的就是设置OnItemSelectedListener,您可以这样操作.
spn.setOnItemSelectedListner(new OnItemSelectedListener(){
public void onItemSelected(AdapterView<?> parent, View view, int spnPosition, long id){
//Do something
}
});
请注意在onItemSelected回调中使用spnPosition.如果您使用position,那么您将不再有权访问getView()参数的位置,因此请使用其他名称,以便您可以同时访问两个/两个.
标签:android-spinner,android-arrayadapter,android 来源: https://codeday.me/bug/20191101/1980551.html