настраиваемый просмотр списка с использованием класса arrayadapter в Android

Как выбрать элемент строки, используя Tick Mark, как Iphone в Android? IAM, используя imageview в list_row.xml.when, когда я нажимаю элемент строки списка, то я показываю изображение в строке imageview.

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

Я использую это, но изображение отображается только в последней строке. Пожалуйста, помогите мне, как выбрать элемент, используя галочку изображения.

public class DistanceArrayAdapter extends ArrayAdapter{
public static String category,state,miles;
public ImageView img;
private Context context;
private int current = -1;
ArrayList dataObject;

public DistanceArrayAdapter(Context context, int textViewResourceId,
ArrayList 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;
}
}
 android22 мая 2013 г., 09:05
да. при щелчке по строке отображается только изображение галочки в строке, а не все строки, только выбранная строка
 Raghunandan22 мая 2013 г., 13:58
@DivyaBalaraj вы можете установить изображение в качестве фона для вашего флажка
 android22 мая 2013 г., 13:28
Бхупендрасинх, я обновил код массива
 Raghunandan22 мая 2013 г., 12:57
@DivyaBalraj проверьте ответ ниже. Это решение, предоставленное Romain Guy разработчиком Google. Проверь ссылку в ответе
 Raghunandan22 мая 2013 г., 13:15
@DivyaBalraj я неЯ не знаю, как это работает в iPhone, но это решение предоставлено разработчиком Google, и я предлагаю вам придерживаться его, если у вас нет лучшего решения
 UnderGround22 мая 2013 г., 09:03
Вы хотите отобразить строку с изображением галочки ...? Значит все подряд ??
 UnderGround22 мая 2013 г., 13:02
Вы можете дать мне код массиваадаптера?
 android22 мая 2013 г., 13:00
Raghunandan Я хочу, чтобы отображать тиковое изображение без флажка click event.when, когда я щелкаю по элементу строки в просмотре списка, я хочу отображать тиковое изображение в строке, это понятие, такое как iphone listview, Выбор отображает галочку
 UnderGround22 мая 2013 г., 09:29
Дивья решил твою проблему или нет ??
 android22 мая 2013 г., 12:55
Нет, я попробовал вашу логику, но галочка отображает изображение только в последнем элементе строки в listview. Я хочу отобразить изображение в выбранном элементе строки.

Ответы на вопрос(4)

имеющего флажки, используя адаптер массива.

ListView с CheckBox с использованием ArrayAdatpter в Android

Вы также можете найти образец кода.

Это будет вывод

Вот фрагмент кода, как я делаю

У меня есть активность, имеющая вид списка

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

А вот Custom Array Adapter, где я работаю с чекбоксом

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

}
</planet></planet>

Пожалуйста! дайте мне знать, если у вас есть какие-либо проблемы в этом.

Установите режим выбора на вашем ListView

    //if using ListActivity or ListFragment
 getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    //or

     myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    //myListView is reference to your ListView

1.gone вам галочку изображение

2.Implementview.setOnClickListener в .arrayadapter

3. В этом чекеimage.getVisibility()==View.GONE затем сделатьimage.setVisibity(View.Visible)

4.Еслиimage.getVisiblity()==View.VISIBLE тогда сделай свойimage.setVisibity(View.GONE)

Попробуй это.

Рисование от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">
  </listview></relativelayout>


И файл 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">

 </checkbox></textview></relativelayout>

При нажатии на кнопку отображается тост-сообщение со списком выбранных элементов. Вы можете изменить вышеуказанное в соответствии с вашими требованиями.

Ваш ответ на вопрос