Как открыть различные действия с моими элементами списка?

У меня есть String-Array с 9 различными строками и создан listView с этими Strings; Теперь я хотел бы открыть другое действие, когда я нажимаю на каждый элемент моего списка. Я уже пробовал

row.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent((Activity)context, Workouts.class)); } }); 

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

Основная деятельность:

 public class MainActivity extends Activity implements OnItemClickListener { private DrawerLayout drawerLayout; private ListView listView; private ActionBarDrawerToggle drawerListener; private MyAdapter MyAdapter; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawerLayout=(DrawerLayout) findViewById(R.id.drawerLayout); listView=(ListView)findViewById(R.id.drawerList); MyAdapter=new MyAdapter(this); listView.setAdapter(MyAdapter); listView.setOnItemClickListener(this); drawerListener= new ActionBarDrawerToggle(this, drawerLayout, R.drawable.listmenu, R.string.drawer_open, R.string.drawer_close){ @Override public void onDrawerClosed(View drawerView) { // TODO Auto-generated method stub super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, " Drawer Opened ", Toast.LENGTH_SHORT).show(); } }; drawerLayout.setDrawerListener(drawerListener); getActionBar().setHomeButtonEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub if (drawerListener.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); drawerListener.onConfigurationChanged(newConfig); } @Override protected void onPostCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onPostCreate(savedInstanceState); drawerListener.syncState(); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } public void selectItem(int position) { listView.setItemChecked(position, true); } public void setTitle(String title) { getActionBar().setTitle(title); class MyAdapter extends BaseAdapter { private Context context; String[] planets; int[] images = { R.drawable.home, R.drawable.workout, R.drawable.week, R.drawable.gallery, R.drawable.statistics, R.drawable.settings}; public MyAdapter(Context context) { this.context=context; planets=context.getResources().getStringArray(R.array.planets); } @Override public int getCount() { // TODO Auto-generated method stub return planets.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return planets[position]; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View row =null; if (convertView==null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); row=inflater.inflate(R.layout.custom_row, parent, false); } else { row = convertView } row.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent((Activity) context, Workouts.class)); } }); TextView titleTextView = (TextView) row.findViewById(R.id.textView1); ImageView titleImageView = (ImageView) row.findViewById(R.id.imageView1); titleTextView.setText(planets[position]); titleImageView.setImageResource(images[position]); return row; } } } 

==> Заменить ниже код в ур MainActivity

 public class MainActivity extends Activity implements OnItemClickListener { private DrawerLayout drawerLayout; private ListView listView; private ActionBarDrawerToggle drawerListener; private MyAdapter MyAdapter; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawerLayout=(DrawerLayout) findViewById(R.id.drawerLayout); listView=(ListView)findViewById(R.id.drawerList); MyAdapter=new MyAdapter(this); listView.setAdapter(MyAdapter); listView.setOnItemClickListener(this); drawerListener= new ActionBarDrawerToggle(this, drawerLayout, R.drawable.listmenu, R.string.drawer_open, R.string.drawer_close){ @Override public void onDrawerClosed(View drawerView) { // TODO Auto-generated method stub super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, " Drawer Opened ", Toast.LENGTH_SHORT).show(); } }; drawerLayout.setDrawerListener(drawerListener); getActionBar().setHomeButtonEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub if(drawerListener.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); drawerListener.onConfigurationChanged(newConfig); } @Override protected void onPostCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onPostCreate(savedInstanceState); drawerListener.syncState(); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (position == 0) { startActivity(new Intent((Activity) context, A.class)); } if (position == 1) { startActivity(new Intent((Activity) context, B.class)); } if (position == 2) { startActivity(new Intent((Activity) context, C.class)); } if (position == 3) { startActivity(new Intent((Activity) context, D.class)); } if (position == 4) { startActivity(new Intent((Activity) context, E.class)); } if (position == 5) { startActivity(new Intent((Activity) context, F.class)); } if (position == 6) { startActivity(new Intent((Activity) context, G.class)); } if (position == 7) { startActivity(new Intent((Activity) context, H.class)); } if (position == 8) { startActivity(new Intent((Activity) context, I.class)); } } public void selectItem(int position) { listView.setItemChecked(position, true); } public void setTitle(String title) { getActionBar().setTitle(title); } class MyAdapter extends BaseAdapter { private Context context; String[] planets; int[] images = { R.drawable.home, R.drawable.workout, R.drawable.week, R.drawable.gallery, R.drawable.statistics, R.drawable.settings}; public MyAdapter(Context context) { this.context=context; planets=context.getResources().getStringArray(R.array.planets); } @Override public int getCount() { // TODO Auto-generated method stub return planets.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return planets[position]; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View row =null; if(convertView==null) { LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); row=inflater.inflate(R.layout.custom_row, parent, false); } else { row=convertView; } TextView titleTextView=(TextView) row.findViewById(R.id.textView1); ImageView titleImageView= (ImageView) row.findViewById(R.id.imageView1); titleTextView.setText(planets[position]); titleImageView.setImageResource(images[position]); return row; } } } 

Вы можете перейти к различной активности в соответствии с положением.

 row.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Switch(position){ case 0: //startActivity 1 break; case 1: //startActivity 2 break; /**** continue **********/ } } }); 

Удалите реализацию OnItemClickListener в MainActivity и вместо этого используйте анонимный класс. Замените listView.setOnItemClickListener(this); с этим:

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (position) { case 0: startActivity(new Intent((Activity) context, Activity0.class)); break; case 1: startActivity(new Intent((Activity) context, Activity1.class)); break; case 2: startActivity(new Intent((Activity) context, Activity2.class)); break; // etc. } }); 

Выберите целевой класс через position , переопределив свой onItemClick из OnItemClickListener :

  @Override public void onItemClick(View view, int position) { switch(position){ case 0: startActivity(new Intent(MainActivity.this, A.class)); break; case 1: startActivity(new Intent(MainActivity.this, B.class)); break; default: break; } } 

Более того, вы должны определить отображение из position в target class .