在android中使用arrayadapter类定制listview

如何select行项目使用像iPhone中的android在android?iam中使用imageview在list_row.xml.when我单击列表行项目然后我在行imageview中显示图像。

if(getItem(position)!=null){ img.setvisibilty(View.Visible);} else{System.out.println("imagenull");} 

我使用这个,但图像显示在最后一行only.please帮助我如何使用tickmark图像select项目。

 public class DistanceArrayAdapter extends ArrayAdapter<Constant>{ public static String category,state,miles; public ImageView img; private Context context; private int current = -1; ArrayList<Constant> dataObject; public DistanceArrayAdapter(Context context, int textViewResourceId, ArrayList<Constant> dataObject) { super(context, textViewResourceId, dataObject); this.context=context; } @Override public View getView(final int position, View convertView, ViewGroup parent) { View rowView=convertView; if(rowView==null){ LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); rowView = inflater.inflate(R.layout.category_row, parent, false); } //TextView textView = (TextView) rowView.findViewById(R.id.text1); TextView textView1 = (TextView) rowView.findViewById(R.id.text2); //textView.setText(""+getItem(position).id); textView1.setText(""+getItem(position).caption); img=(ImageView)rowView.findViewById(R.id.img); img.setVisibility(View.GONE); if(position%2==1) { rowView.setBackgroundResource(R.color.even_list); } else { rowView.setBackgroundResource(R.color.odd_list); } 

rowView.setOnClickListener(new OnClickListener(){

  @Override public void onClick(View v) { if(img.getVisibility()==View.GONE) { img.setVisibility(View.VISIBLE); System.out.println("1"); } if(img.getVisibility()==View.VISIBLE){ img.setVisibility(View.GONE); System.out.println("12"); } miles=getItem(position).caption; System.out.println("miles"+miles); } }); return rowView; } } 

https://groups.google.com/forum/?fromgroups#!topic/android-developers/No0LrgJ6q2M中绘制;

 public class MainActivity extends Activity implements AdapterView.OnItemClickListener { String[] GENRES = new String[] {"Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama", "Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"}; private CheckBoxAdapter mCheckBoxAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ListView listView = (ListView) findViewById(R.id.lv); listView.setItemsCanFocus(false); listView.setTextFilterEnabled(true); listView.setOnItemClickListener(this); mCheckBoxAdapter = new CheckBoxAdapter(this, GENRES); listView.setAdapter(mCheckBoxAdapter); Button b = (Button) findViewById(R.id.button1); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub StringBuilder result = new StringBuilder(); for (int i = 0; i < GENRES.length; i++) { if (mCheckBoxAdapter.mCheckStates.get(i) == true) { result.append(GENRES[i]); result.append("\n"); } } Toast.makeText(MainActivity.this, result, 1000).show(); } }); } public void onItemClick(AdapterView parent, View view, int position, long id) { mCheckBoxAdapter.toggle(position); } class CheckBoxAdapter extends ArrayAdapter implements CompoundButton.OnCheckedChangeListener { LayoutInflater mInflater; TextView tv1, tv; CheckBox cb; String[] gen; private SparseBooleanArray mCheckStates; private SparseBooleanArray mCheckStates; CheckBoxAdapter(MainActivity context, String[] genres) { super(context, 0, genres); mCheckStates = new SparseBooleanArray(genres.length); mInflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); gen = genres; } @Override public int getCount() { // TODO Auto-generated method stub return gen.length; } } } 

activity_main.xml中

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/lv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/button1"/> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="Button" /> </RelativeLayout> 

和checkbox的XML文件:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="15dp" android:layout_marginTop="34dp" android:text="TextView" /> <CheckBox android:id="@+id/checkBox1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_below="@+id/textView1" android:layout_marginRight="22dp" android:layout_marginTop="23dp" /> </RelativeLayout> 

当您点击button时,将显示一个包含所选项目列表的吐司消息。 您可以根据您的要求修改上述内容。

在这里输入图像描述

在ListView上设置select模式

  //if using ListActivity or ListFragment getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //or myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //myListView is reference to your ListView 

我已经使用Array适配器为具有checkbox的List创build了一个示例示例。

ListView与CheckBox在Android中使用ArrayAdatpter

你也可以find示例代码。

这将被输出

在这里输入图像描述

这是代码片断我如何做

我有一个活动有列表视图

 public class MainActivity extends Activity { private ListView mainListView = null; private Planet[] planets = null; private ArrayAdapter<Planet> listAdapter = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mainListView = (ListView) findViewById(R.id.mainListView); // When item is tapped, toggle checked properties of CheckBox and // Planet. mainListView .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View item, int position, long id) { Planet planet = listAdapter.getItem(position); planet.toggleChecked(); PlanetViewHolder viewHolder = (PlanetViewHolder) item .getTag(); viewHolder.getCheckBox().setChecked(planet.isChecked()); } }); // Create and populate planets. planets = (Planet[]) getLastNonConfigurationInstance(); if (planets == null) { planets = new Planet[] { new Planet("Mercury"), new Planet("Venus"), new Planet("Earth"), new Planet("Mars"), new Planet("Jupiter"), new Planet("Saturn"), new Planet("Uranus"), new Planet("Neptune"), new Planet("Ceres"), new Planet("Pluto"), new Planet("Haumea"), new Planet("Makemake"), new Planet("Eris") }; } ArrayList<Planet> planetList = new ArrayList<Planet>(); planetList.addAll(Arrays.asList(planets)); // Set our custom array adapter as the ListView's adapter. listAdapter = new PlanetArrayAdapter(this, planetList); mainListView.setAdapter(listAdapter); } public Object onRetainNonConfigurationInstance() { return planets; } } 

这里是我处理checkbox的自定义数组适配器的东西

 public class PlanetArrayAdapter extends ArrayAdapter<Planet> { private LayoutInflater inflater; public PlanetArrayAdapter(Context context, List<Planet> planetList) { super(context, R.layout.simplerow, R.id.rowTextView, planetList); //Cache the LayoutInflate to avoid asking for a new one each time. inflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent){ Planet planet = (Planet) this.getItem(position); CheckBox checkBox; TextView textView; // Create a new row view if (convertView == null) { convertView = inflater.inflate(R.layout.simplerow, null); textView = (TextView) convertView.findViewById(R.id.rowTextView); checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox01); convertView.setTag(new PlanetViewHolder(textView, checkBox)); // If CheckBox is toggled, update the planet it is tagged with. checkBox.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { CheckBox cb = (CheckBox) v; Planet planet = (Planet) cb.getTag(); planet.setChecked(cb.isChecked()); } }); } // Re-use existing row view else { PlanetViewHolder viewHolder = (PlanetViewHolder) convertView .getTag(); checkBox = viewHolder.getCheckBox(); textView = viewHolder.getTextView(); } checkBox.setTag(planet); // Display planet data checkBox.setChecked(planet.isChecked()); textView.setText(planet.getName()); return convertView; } } 

请! 让我知道你是否有任何麻烦。

1.让你知道你的刻度图像

view.setOnClickListenerarrayadapter中实现arrayadapter

3.检查image.getVisibility()==View.GONE然后make image.setVisibity(View.Visible)

4.if image.getVisiblity()==View.VISIBLE然后让你的image.setVisibity(View.GONE)

尝试这个。