Android 选择模式不影响具有布局的自定义适配器
之前,我使用GridView并将ChoiceMode设置为single,一切正常。 现在我用它的布局创建自定义适配器。 然后将项目添加到GridView。 并将ChoiceMode设置为Single,如下所示。 但选择模式在外观和视图中不起作用 以下是自定义适配器:Android 选择模式不影响具有布局的自定义适配器,android,android-arrayadapter,android-adapter,android-gridview,Android,Android Arrayadapter,Android Adapter,Android Gridview,之前,我使用GridView并将ChoiceMode设置为single,一切正常。 现在我用它的布局创建自定义适配器。 然后将项目添加到GridView。 并将ChoiceMode设置为Single,如下所示。 但选择模式在外观和视图中不起作用 以下是自定义适配器: public class CarAdapter extends ArrayAdapter<Car>{ public CarAdapter(Context context, int resource, Arr
public class CarAdapter extends ArrayAdapter<Car>{
public CarAdapter(Context context, int resource, ArrayList<Car> carArrayList) {
super(context, resource, carArrayList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Car car = getItem(position);
if(convertView == null)
{
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_car,parent, false);
}
TextView carName = (TextView)convertView.findViewById(R.id.textView2);
TextView carSIM = (TextView)convertView.findViewById(R.id.textView);
carName.setText(car.getName());
carSIM.setText(car.getSIM());
return convertView;
}
}
公共类CarAdapter扩展了ArrayAdapter{
公共CarAdapter(上下文上下文、int资源、ArrayList carArrayList){
super(上下文、资源、carArrayList);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
Car Car=getItem(位置);
if(convertView==null)
{
convertView=LayoutInflater.from(getContext()).flate(R.layout.item\u car,parent,false);
}
TextView carName=(TextView)convertView.findViewById(R.id.textView2);
TextView carSIM=(TextView)convertView.findViewById(R.id.TextView);
carName.setText(car.getName());
carSIM.setText(car.getSIM());
返回视图;
}
}
这是它的布局XML:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"
android:layout_marginTop="30dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Small Text"
android:id="@+id/textView2"
android:layout_x="12dp"
android:layout_y="2dp"
android:textColor="#000"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_marginLeft="20dp"
android:id="@+id/textView"
android:layout_x="157dp"
android:layout_y="0dp"
android:textColor="#000"/>
</AbsoluteLayout>
以下是主要活动:
public class DisplayActivity extends Activity {
CarAdapter carAdapter;
Car car;
Car car2;
Car car3;
ArrayList<Car> carArrayList;
GridView gridView;
Button test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display);
carArrayList = new ArrayList<Car>();
gridView = (GridView) findViewById(R.id.gridView);
carAdapter = new CarAdapter(getApplicationContext(), android.R.layout.select_dialog_singlechoice, carArrayList);
test = (Button) findViewById(R.id.button);
car = new Car("Test", "aaa");
car2 = new Car("Test2", "aaa");
car3 = new Car("Test3", "aaa");
Car car4 = new Car("Test4", "aaa");
carArrayList.add(car);
carArrayList.add(car2);
carArrayList.add(car3);
carArrayList.add(car4);
gridView.setAdapter(carAdapter);
Toast.makeText(getApplicationContext(), "Choice mode is : " + gridView.getChoiceMode(), Toast.LENGTH_SHORT ).show();
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (gridView.isItemChecked(gridView.getCheckedItemPosition())) {
String name = (carAdapter.getItem(gridView.getCheckedItemPosition())).getName();
Toast.makeText(getApplicationContext(), "Here is " + name, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "This is not true", Toast.LENGTH_SHORT).show();
}
}
});
}
}
公共类DisplayActivity扩展活动{
斑羚斑羚;
汽车;
小汽车2辆;
汽车3;
ArrayList Cararlaylist;
GridView;
按钮试验;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_显示);
carArrayList=新的ArrayList();
gridView=(gridView)findViewById(R.id.gridView);
carAdapter=新的carAdapter(getApplicationContext(),android.R.layout.select\u dialog\u singlechoice,carArrayList);
test=(按钮)findViewById(R.id.Button);
汽车=新车(“测试”、“aaa”);
car2=新车(“测试2”,“aaa”);
car3=新车(“测试3”,“aaa”);
car4=新车(“测试4”、“aaa”);
carArrayList.add(car);
carArrayList.add(car2);
carArrayList.add(car3);
carArrayList.add(car4);
setAdapter(carAdapter);
Toast.makeText(getApplicationContext(),“选择模式为:”+gridView.getChoiceMode(),Toast.LENGTH_SHORT).show();
test.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(gridView.isItemChecked(gridView.GetCheckEditePosition())){
字符串名称=(carAdapter.getItem(gridView.getCheckEditePosition()).getName();
Toast.makeText(getApplicationContext(),“Here is”+名称,Toast.LENGTH\u SHORT.show();
}否则{
Toast.makeText(getApplicationContext(),“这不是真的”,Toast.LENGTH\u SHORT.show();
}
}
});
}
}
如您所见,我放置了一个测试按钮并返回所选GridView项的名称。它返回值,但没有可检查或选定的视图
和主要活动XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".DisplayActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:weightSum="1"
android:layout_marginTop="30dp">
<GridView
android:layout_width="wrap_content"
android:layout_height="387dp"
android:id="@+id/gridView"
android:background="#abc"
android:layoutDirection="ltr"
android:choiceMode="singleChoice"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test"
android:id="@+id/button" />
</LinearLayout>
我应该自己设置吗?
如果是,在哪里
任何解决方案都将不胜感激
首先创建数组列表。然后创建适配器,然后将其作为适配器分配给网格视图
您要做的是首先创建适配器创建数组列表并将其设置为grid view。不可能,我这样做了:carArrayList=new ArrayList();汽车=新车(“aa”、“jj”);car2=新车(“aa”、“aa”);car3=新车(“aa”、“aa”);carArrayList.add(car);carArrayList.add(car2);carArrayList.add(car3);carArrayList.add(car4);gridView=(gridView)findViewById(R.id.gridView);carAdapter=新的carAdapter(getApplicationContext(),android.R.layout.select\u dialog\u singlechoice,carArrayList);setAdapter(carAdapter);当我从GridView中选择时,它会亮一秒钟。但没有勾号或单选按钮可供选择。