2013-02-27 1 views
0

Это мой ListView:Android: после прокрутки ListView, onItemClick() вызывает ложный предмета

enter image description here

После прокручиваю этот ListView, и нажмите, например, «Скрыть», действие «Фаворит» получает (и аналогичные ошибки - если я нажимаю «Сжать», что-то еще называется).

Это происходит только после прокрутки. Никогда, если я не прокручиваю ListView.

Это мой адаптер:

package com.landa.adapter; 

import java.util.ArrayList; 

import com.example.fileexplorermanager.R; 
import com.landa.dialog.OperationsDialogFragment; 

public class OperationsAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final ArrayList<String> data; 

    public OperationsAdapter(Context context, ArrayList<String> values) { 
    super(context, R.layout.operations_list_item, values); 
    this.context = context; 
    this.data = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    //View rowView = inflater.inflate(R.layout.operations_list, parent, false); 
    View rowView = inflater.inflate(R.layout.operations_list_item, parent, false); 

    TextView textView = (TextView) rowView.findViewById(R.id.operation_name); 

    String temp = data.get(position); 
    String op_name = temp; 
    textView.setText(op_name); 

    ImageView imageView = (ImageView) rowView.findViewById(R.id.operation_image); 

    return rowView; 

    } 
    public int getCount() { 
     return data.size(); 
    } 

} 

Это диалоговое окно (элемент управления ListView находится внутри диалога):

public class OperationsDialogFragment extends DialogFragment { 

// operation names 
public static final String OP_CUT = "Cut"; 
public static final String OP_COPY = "Copy"; 
public static final String OP_RENAME = "Rename"; 
public static final String OP_DELETE = "Delete"; 
public static final String OP_SELECT_ALL = "Select all"; 
public static final String OP_SELECT_INVERSE = "Select inverse"; 
public static final String OP_CREATE_SHORTCUT = "Create shortcut"; 
public static final String OP_FAVORITE = "Favorite"; 
public static final String OP_HIDE = "Hide"; 
public static final String OP_COMPRESS = "Compress"; 
public static final String OP_SET_AS_HOME = "Set as home"; 
public static final String OP_PROPERTIES = "Properties"; 

ArrayList<String> operationsInfo = new ArrayList<String>(); 

private OperationsHandler opHandler; 
private File f; 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    opHandler = OperationsHandler.getInstance(); 

    final String operation_type = getArguments().getString("operation_type"); 
    final String file_absolute_path = getArguments().getString("file_absolute_path"); 

    if(file_absolute_path != null) 
     this.f = new File(file_absolute_path); 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    ArrayList<String> operationsList; 
    if (operation_type.equals("single_file")) { 
     setSingleFileDialogTitle(builder); 
     operationsList = getSingleFileOperationsList(); 
    } else if (operation_type.equals("multiple_files")) { 
     setDefaultDialogTitle(builder); 
     operationsList = getMultipleFilesOperationsList(); 
    } else { 
     setDefaultDialogTitle(builder); 
     operationsList = getDefaultOperationsList(); 
    } 

    OperationsAdapter adap = new OperationsAdapter(getActivity(), 
      operationsList); 

    // upon operation click, execute operation 
    builder.setAdapter(adap, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 

      String op_name = getOperationName(((AlertDialog) dialog) 
        .getListView().getChildAt(whichButton)); 
      if (operation_type.equals("single_file")) { 
       executeSingleFileOperation(op_name); 
      } else { 
       executeMultipleFilesOperation(op_name); 
      } 
     } 
    }); 

    return builder.create(); 
} 

Что может быть не так?

+0

Где ваш код onClickListener? – Lefteris

+0

ListView живет внутри диалога, который реализует .onClick(). Я разместил его прямо сейчас. – Tool

+0

Hm ... после публикации этого кода я понял, что я устанавливаю onClick() для диалогового адаптера вместо ListView, может быть, это моя проблема? – Tool

ответ

0

Реализовать onClick для ListView предметов, получая position из ListView пункта, вместо DialogOnClick. Я думаю, что проблема.

+0

Как мне получить доступ к моему ListView вне метода .setAdapter()? Внутри метода я получил его через DialogInterface с .getListView(). Но вне .setAdapter()? Возможно, с getActivity(). FindViewById()? – Tool

+0

Да ... Использование getActivity(). FindViewById (id) –

+0

Но какой идентификатор имеет ListView? Адаптеры, которые создают список, не дают им идентификатор ... Я думаю, что мне нужно получить мой ListView по-разному. – Tool

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