2013-08-20 5 views
0

У меня есть список, я хочу, чтобы каждая кнопка открывала разные действия.Добавить намерение в OnItemClickListener

listview Есть много вариантов, каждый вариант приведет к другому действию.

Я не знал, как это сделать.

Спасибо.

Java

public class AndroidListViewActivity extends ListActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     String[] adobe_products = getResources().getStringArray(
       R.array.adobe_products); 

     this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, 
       R.id.label, adobe_products)); 

     ListView lv = getListView(); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       String product = ((TextView) view).getText().toString(); 

       Intent i = new Intent(getApplicationContext(), mavo.class); 

       i.putExtra("product", product); 
       startActivity(i); 

      } });}} 

listen_item XML

<?xml version="1.0" encoding="utf-8"?> 
<!-- Single List Item Design --> 

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/label" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="10dip" 
     android:textSize="16dip" 
     android:textStyle="bold" > 

</TextView> 
+0

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

+0

Вы делитесь информацией, которую знаете в стиле QNA? –

+0

имеют разные классы активности, соответствующие различным элементам списка. @DaleWilson – omer341

ответ

1

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

Попробуйте это вместо того, чтобы для получения строки продукта: String product = adobe_products[position];

Вы должны будете сделать String[] adobe_products финал.

EDIT: Основываясь на том, что я думаю, что вы просите, попробуйте следующее:

lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      Class<? extends Activity> activityToStart = null; 

      switch (position){ 
      case 0: 
       activityToStart = MyProduct0Activity.class; 
       break; 
      case 1: 
       activityToStart = MyProduct1Activity.class; 
       break; 
      //etc. 
      } 

      Intent i = new Intent(getApplicationContext(), activityToStart); 
      startActivity(i); 

     } }); 
+0

В списке есть много вариантов. Каждый вариант приведет к другому действию. – omer341

0

Okie .. Так вот что я понял из ваших комментариев. У вас есть listview, и каждый элемент в listview является текстовым. И когда вы нажимаете на каждый элемент, вам нужно перейти на другой экран/Activity.

Если это так ...

заменить этот код

public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       String product = ((TextView) view).getText().toString(); 

       Intent i = new Intent(getApplicationContext(), mavo.class); 

       i.putExtra("product", product); 
       startActivity(i); 

      } 

с этим ..

 public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 

        Switch(position){ 
case 0: 
String product = ((TextView) view).getText().toString(); 
Intent i = new Intent(AndroidListViewActivity.this, FIRST_SCREEN.class); 
i.putExtra("product", product); 
startActivity(i); 
break; 
case 1: 
String product = ((TextView) view).getText().toString(); 
Intent i = new Intent(AndroidListViewActivity.this, SECOND_SCREEN.class); 
i.putExtra("product", product); 
startActivity(i); 
break; 

// Repeat the same for all screens 
... 
... 
... 

} 


       } 

Примечание ::: Я не проверял этот код. Это просто, чтобы дать вам представление о том, как это сделать.

Надеюсь, что это поможет.