2014-09-28 6 views
2

Я пытаюсь использовать ListView с двумя ImageVies. Сначала выберите фотографию и вторую кнопку удаления фотографии.Неверный идентификатор onItemClick

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

Может быть, вы можете сказать, где я ошибаюсь?

обновление списка/INIT часть

public void updateList(final ArrayList<String> arrayList) { 
     CustomList adapter = new 
       CustomList(FullInfoActivity.this, arrayList); 
     HorizontalListView list = (HorizontalListView) findViewById(R.id.HorizontalListView); 
     list.setAdapter(adapter); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       Log.e("Parent", String.valueOf(parent.getId()) +" " +R.id.img + " "+R.id.image_delete + " "+parent.getItemAtPosition(position)); 
       switch (parent.getId()) { 
        case R.id.img: 
         Toast.makeText(getApplicationContext(), "111111111", Toast.LENGTH_SHORT).show(); 
         break; 
        case R.id.image_delete: 
         Toast.makeText(getApplicationContext(), "222222222", Toast.LENGTH_SHORT).show(); 
         break; 
       } 

ListView элемент

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    tools:context=".MainActivity" > 
    <ImageView 
     android:id="@+id/img" 
     android:layout_width="75dp" 
     android:layout_height="75dp" 
     android:scaleType="centerCrop" 
     android:visibility="invisible" 
     android:layout_marginRight="8dp" 
     android:clickable="true" 
     android:layout_marginTop="8dp" 
     android:layout_marginBottom="8dp" 
     android:contentDescription="image" /> 

    <ProgressBar 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/progressBar" 
     android:layout_centerVertical="true" 
     android:layout_alignLeft="@+id/img" 
     android:layout_alignStart="@+id/img" 
     android:layout_alignRight="@+id/img" 
     android:layout_alignEnd="@+id/img" 
     android:visibility="visible" /> 

    <ImageView 
     android:layout_width="20dp" 
     android:layout_height="20dp" 
     android:id="@+id/image_delete" 
     android:src="@drawable/ic_action_cancel_light" 
     android:layout_alignTop="@+id/img" 
     android:layout_alignRight="@+id/img" 
     android:layout_alignEnd="@+id/img" 
     android:background="#7f989e9a" 
     android:clickable="true" 
     android:contentDescription="Cancel" /> 

</RelativeLayout> 

Настраиваемый список Адаптер

public class CustomList extends ArrayAdapter<String> { 
    private final Activity context; 
    private final ArrayList<String> arrayList; 

    public CustomList(Activity context, ArrayList<String> arrayList) { 
     super(context, R.layout.list_single, arrayList); 
     this.context = context; 
     this.arrayList = arrayList; 
    } 

    @Override 
    public View getView(final int position, View view, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.list_single, null, true); 

     final ImageView imageView = (ImageView) rowView.findViewById(R.id.img); 
     final ProgressBar pb = (ProgressBar) rowView.findViewById(R.id.progressBar); 
     final Animation show = AnimationUtils.loadAnimation(context, R.anim.appear_animation); 
     ImageView delete = (ImageView) rowView.findViewById(R.id.image_delete); 
      final Timer myTimer = new Timer(); // Создаем таймер 
     myTimer.schedule(new TimerTask() { // Определяем задачу 
       @Override 
       public void run() { 
        File f = new File(arrayList.get(position)); 
        if (f.exists()) { 
         final Bitmap myBitmap = BitmapFactory.decodeFile(f.getAbsolutePath()); 
         if (myBitmap != null) { 
          myTimer.cancel(); 
          context.runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            pb.setVisibility(View.GONE); 
            imageView.setImageBitmap(Bitmap.createScaledBitmap(myBitmap, 120, 120, false)); 
            imageView.setVisibility(View.VISIBLE); 
            imageView.startAnimation(show); 
           } 
          }); 
         } 
        } 
       } 
      }, 100, 100); 
     return rowView; 
    } 

} 
+0

вам нужно будет установить OnClick слушателя внутри 'CustomList' как для кнопки, так как' onItemClick' метод огонь только тогда, когда ListView строка щелкнул вместо любого вида ребенка клике от ряда. Пример [Multi Touch List View: Multi Click List View Demo в Android: нажмите кнопку в режиме просмотра списка в Android] (http://www.androidhub4you.com/2013/02/muftitouch-listview-multi-click.html) –

+0

Просто в качестве примечания повторите использование своих взглядов, которые важны для производительности. – rekire

+0

@ ρяσѕρєяK Я не могу, becauae, тогда я не могу обновить список в своей деятельности. Или я не знаю, как это сделать. И с setonclick listview становятся не прокручиваемыми –

ответ

1

получить одинаковый идентификатор, отличный от обоих ImageViews.

потому что у вас есть вид с номером строки, и он отличается от взглядов их детей. так что в вашем getView использования ниже код:

ImageView delete = (ImageView) rowView.findViewById(R.id.image_delete); 
delete.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     // do your work 
    } 
}); 
+0

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

+0

Почему вы хотите назвать этот метод? – mmlooloo

+0

Также весь ListView не может быть перетаскиваем –

Смежные вопросы