我有一个项目,我想在其中设置自定义View
,而不是简单的Android GridView
。
我这样做了,现在我想为每一行设置RadioButton
。
我看到了this
但我无法在此回复中指定布尔数组。
这是我的代码。
首先Items Layout
。
<?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"/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radiogroup"></RadioGroup>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioButton"
android:layout_x="302dp"
android:layout_y="0dp"
android:checked="false" />
</AbsoluteLayout>
简单GridView
,Button
。
<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>
在我的适配器类中:
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.GridView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import java.util.ArrayList;
import android.widget.RadioButton;
public class CarAdapter extends ArrayAdapter<Car> {
RadioButton radioButton;
RadioGroup radioGroup;
ArrayList<Boolean> booleans = new ArrayList<Boolean>();
public CarAdapter(Context context, int resource, ArrayList<Car> carArrayList, ArrayList<Boolean> mlist) {
super(context, resource, carArrayList);
this.booleans = mlist;
}
@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);
}
RadioGroup radioGroup = (RadioGroup)convertView.findViewById(R.id.radiogroup);
radioButton = (RadioButton)convertView.findViewById(R.id.radioButton);
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;
}
RadioButton.OnCheckedChangeListener mListener = new RadioButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
booleans.set((Integer) buttonView.getTag(), isChecked); // get the tag so we know the row and store the status
}
};
}
我在getView
方法中尝试了这个:
radioButton.setTag(Integer.valueOf(position));
radioButton.setChecked(booleans.get(position));
radioButton.setOnCheckedChangeListener(mListener);
mListener
是:
RadioButton.OnCheckedChangeListener mListener = new RadioButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
booleans.set((Integer) buttonView.getTag(), isChecked); // get the tag so we know the row and store the status
}
};
但它给了我
java.lang.IndexOutOfBoundsException at line `radioButton.setChecked(booleans.get(position));`
以下是Main Activity
:
import android.app.Activity;
import android.media.Image;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.Button;
import android.widget.CheckedTextView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.ArrayList;
public class DisplayActivity extends Activity {
CarAdapter carAdapter;
Car car;
Car car2;
ArrayList<Car> carArrayList;
GridView gridView;
Button test;
ArrayList<Boolean> booleans;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display);
carArrayList = new ArrayList<Car>();
car = new Car("Davie", "Smith");
car2 = new Car("Enrique", "Wall");
carArrayList.add(car);
carArrayList.add(car2);
booleans = new ArrayList<Boolean>(carArrayList.size());
carAdapter = new CarAdapter(getApplicationContext(), android.R.layout.simple_list_item_checked, carArrayList, booleans);
gridView = (GridView) findViewById(R.id.gridView);
gridView.setAdapter(carAdapter);
test = (Button) findViewById(R.id.button);
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();
}
}
});
}
}
答案 0 :(得分:1)
在您的CarAdapter中修改此...
<style name="myButton" parent="@style/Base.Widget.AppCompat.Button">
<item name="android:colorButtonNormal">#3578A9</item>
<item name="android:inset">0dp</item>
</style>
到
public CarAdapter(Context context, int resource, ArrayList<Car> carArrayList, ArrayList<Boolean> mlist) {
super(context, resource, carArrayList);
mlist = this.booleans;
}
答案 1 :(得分:0)
您正在将 public void EnterQuantity() {
wd.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[3]/android.widget.LinearLayout[3]/android.widget.LinearLayout[1]/android.widget.EditText[1]")).sendKeys("1");
}
ArrayList分配给booleans
ArrayList,其中<strong>为空,因此您获得了mlist
..您必须分配IndexOutOfBoundsException
} mlist
ArrayList
booleans
应该是..
mlist = this.booleans;
在this.booleans = mlist;
构造函数中。