选择模式不会影响带布局的自定义适配器

时间:2015-11-18 11:43:23

标签: android android-arrayadapter android-adapter android-gridview

之前我使用过GridView并将ChoiceMode设置为单一,一切正常。 现在我用它的布局创建我的自定义适配器。 然后将项添加到GridView。 并将ChoiceMode设置为Single,如下所示。 但是选择模式在外观和视图中不起作用。

这是自定义适配器:

  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;
    }

}

这是布局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();
            }
        }
    });
    }
}

如你所见,我放了一个测试按钮并返回所选GridView Item的名称。它返回值,但没有可检查或选择的视图。

主要活动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>

我应该自己设置吗? 如果是的话,在哪里?

任何解决方案都会表示赞赏。

THX

1 个答案:

答案 0 :(得分:0)

首先创建数组列表。然后创建适配器,然后将其指定为网格视图的适配器。

您正在做的是首先创建适配器创建数组列表并将其设置为网格视图。