2016-04-21 2 views
0

Я сделал список в Android Studio. В представлении listview есть изображение в каждом элементе, но я не знаю, как сделать его интерактивным. Я просмотрел интернет для решения, но сложная часть, похоже, реализует его в моем собственном коде. Я не могу понять это.Android/Java - Щелчок изображения в виде списка

Изображение в вопросе = ex_img

- Имейте в виду, когда изображение щелкнули, он также должен знать свою позицию в списке.

Спасибо за чтение, и я надеюсь, что вы можете мне помочь.

Адаптер для списка:

public class CustomList extends ArrayAdapter<String> { 
    private String[] ex_name; 
    private String[] ex_diff; 
    private String[] ex_muscle; 
    private String[] ex_dpr; 
    private Integer[] ex_img; 
    private Activity context; 

    public CustomList(Activity context, String[] ex_name, String[] ex_diff, String[] ex_muscle, String[] ex_dpr, 
         Integer[] ex_img) { 
     super(context, R.layout.row_layout, ex_name); 
     this.context = context; 
     this.ex_name = ex_name; 
     this.ex_muscle = ex_muscle; 
     this.ex_diff = ex_diff; 
     this.ex_dpr = ex_dpr; 
     this.ex_img = ex_img; 

    } 
//LIST --> XML 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View listViewItem = inflater.inflate(R.layout.row_layout, null, true); 
     TextView list_name = (TextView) listViewItem.findViewById(R.id.ex_name); 
     TextView list_diff = (TextView) listViewItem.findViewById(R.id.ex_diff); 
     TextView list_muscle = (TextView) listViewItem.findViewById(R.id.ex_muscle); 
     ImageView list_image = (ImageView) listViewItem.findViewById(R.id.ex_img); 
     TextView list_dpr = (TextView) listViewItem.findViewById(R.id.ex_dpr); 

     list_name.setText(ex_name[position]); 
     list_muscle.setText(ex_muscle[position]); 
     list_diff.setText(ex_diff[position]); 
     list_dpr.setText(ex_dpr[position]); 
     list_image.setImageResource(ex_img[position]); 

     return listViewItem; 

    } 
} 

Часть из MainActivity, которые могут быть необходимы:

private Integer img[] = { 
      R.drawable.ic_favorite_white_24dp, 
      R.drawable.ic_location_on_white_24dp, 
      R.drawable.ic_update_white_24dp, 
      R.drawable.ic_local_dining_white_24dp, 
      R.drawable.ic_local_dining_white_24dp 

    }; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     CustomList customList = new CustomList(this, name, diff, muscle, dpr, img); 

     listView = (ListView) findViewById(R.id.listview); 
     listView.setAdapter(customList); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Toast.makeText(getApplicationContext(),"You Clicked "+name[i],Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
+0

Вы уже реализовали 'OnItemClickListener'. У вас есть позиция в этом. При щелчке по любому элементу списка элементов 'onItemClick' будет вызываться. –

+0

Так что это плохо, когда я хочу накладываться при нажатии именно на изображении? – Calis

ответ

2

Добавить onClickListener в свой ImageView в getView() -

list_image.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //Here you have the position too. 
}); 

Просто сделайте параметр positionfinal в getView()

+0

Я слышал, что это окончательно, но это плохо. На самом деле это код, который у меня уже был для него. Спасибо, что разобрал его. Попробуйте это сейчас! – Calis

+1

Сделать его окончательным является хорошей практикой. Отправьте мне ссылку, где вы нашли эту информацию. –

+0

http://stackoverflow.com/questions/24144663/make-a-variable-final-in-android-studio – Calis

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