2013-03-04 117 views
0

我試圖讓我的listview項目可點擊;但無法正常工作。當我點擊某個項目時,它會切換屏幕,但不會切換到所需的屏幕。下面是代碼可點擊列表視圖中的項目

private ListView lv; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_signup); 
    lv = (ListView) findViewById(R.id.listView1); 
    // Instanciating an array list (you don't need to do this, you already have yours) 
    ArrayList<String> menu_Items = new ArrayList<String>(); 
    menu_Items.add("Fill Treatment Form"); 
    menu_Items.add("View Medical History"); 
    menu_Items.add("View Medication"); 
    menu_Items.add("View Diet"); 
    menu_Items.add("View First Aid"); 
    menu_Items.add("Look Up Map"); 
    menu_Items.add("Account Settings"); 
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter 
    ArrayAdapter<String> arrayAdapter =  
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu_Items); 
    lv.setAdapter(arrayAdapter); 


    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class); 
      startActivity(i); 

     } 

    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg1, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(), MedicalHistoryActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg2, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(), MedicationActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg3, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(),DietActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg4, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(),FirstAidActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg5, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(),MapActivity.class); 
      startActivity(i); 
     } 
    }); 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg6, View view, int position, long id) { 

      Intent i = new Intent(getApplicationContext(),SettingsActivity.class); 
      startActivity(i); 
     } 
    }); 
} 

當我點擊任何Accounte設置活動打開列表視圖項目。 我是一個新手,所以請不要判斷我的編碼:)

+1

你每次通話時間覆蓋最後聽者'setOnItemClickListener()'。您應該使用一個可以處理項目之間差異的偵聽器。 – Geobits 2013-03-04 15:31:45

回答

1

嘗試增加一個switch語句點​​擊監聽

private ListView lv; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_signup); 
    lv = (ListView) findViewById(R.id.listView1); 
    // Instanciating an array list (you don't need to do this, you already have yours) 
    ArrayList<String> menu_Items = new ArrayList<String>(); 
    menu_Items.add("Fill Treatment Form"); 
    menu_Items.add("View Medical History"); 
    menu_Items.add("View Medication"); 
    menu_Items.add("View Diet"); 
    menu_Items.add("View First Aid"); 
    menu_Items.add("Look Up Map"); 
    menu_Items.add("Account Settings"); 
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter 
    ArrayAdapter<String> arrayAdapter =  
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu_Items); 
    lv.setAdapter(arrayAdapter); 


    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
     switch(position){ 
      case 0: 
     Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class); 
       startActivity(i); 
     break; 
      case 1: 
     Intent i = new Intent(getApplicationContext(), MedicalHistoryActivity.class); 
      startActivity(i); 
     break; 
      case 2: 
     Intent i = new Intent(getApplicationContext(), MedicationActivity.class); 
      startActivity(i); 
     break; 
      case 3: 
     Intent i = new Intent(getApplicationContext(),DietActivity.class); 
       startActivity(i); 
     break; 
      case 4: 
     Intent i = new Intent(getApplicationContext(),FirstAidActivity.class); 
       startActivity(i); 
     break; 
      case 5: 
     Intent i = new Intent(getApplicationContext(),MapActivity.class); 
       startActivity(i); 
     break; 
      case 6: 
     Intent i = new Intent(getApplicationContext(),SettingsActivity.class); 
       startActivity(i); 
     break; 

     } 


     } 

    }); 
} 
+0

謝謝大家的幫助...... :) – 2013-03-04 15:48:34

2

一個listview只能有一個OnItemClickListener,所以除了最後都扔掉了。這就是爲什麼SettingsActivity是開放的,無論你點擊哪個項目。

要解決這個問題,請使用一個偵聽器並讓這個偵聽器處理不同的選項。

lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg1, View view, int position, long id) { 
     switch(position) { 
      case 0: 
       // start activity 1 
       break; 
      case 1: 
       // start activity 2 
       break; 
      case 2: 
       // start activity 3 
       break; 
      // more case statements 

    } 
}); 
1

瓦ydon't您在佈局爲listview添加android:onClick="myClickMethod",然後創建具有相同名稱的方法?在這裏,你可以看到完全被按下的微觀視圖。另外,ListView控件只有一個onClickListener ;-)

乾杯

0

這是爲了做到這一點;我做錯了。 感謝您的幫助球員。 和平/

private ListView lv; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_signup); 
    lv = (ListView) findViewById(R.id.listView1); 
    // Instanciating an array list (you don't need to do this, you already have yours) 
    ArrayList<String> menu_Items = new ArrayList<String>(); 
    menu_Items.add("Fill Treatment Form"); 
    menu_Items.add("View Medical History"); 
    menu_Items.add("View Medication"); 
    menu_Items.add("View Diet"); 
    menu_Items.add("View First Aid"); 
    menu_Items.add("Look Up Map"); 
    menu_Items.add("Account Settings"); 
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter 
    ArrayAdapter<String> arrayAdapter =  
    new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, menu_Items); 
    lv.setAdapter(arrayAdapter); 


    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
     switch(position){ 
      case 0: 
     Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class); 
       startActivity(i); 
     break; 
      case 1: 
     Intent j = new Intent(getApplicationContext(), MedicalHistoryActivity.class); 
      startActivity(j); 
     break; 
      case 2: 
     Intent k = new Intent(getApplicationContext(), MedicationActivity.class); 
      startActivity(k); 
     break; 
      case 3: 
     Intent l = new Intent(getApplicationContext(),DietActivity.class); 
       startActivity(l); 
     break; 
      case 4: 
     Intent m = new Intent(getApplicationContext(),FirstAidActivity.class); 
       startActivity(m); 
     break; 
      case 5: 
     Intent n = new Intent(getApplicationContext(),MapActivity.class); 
       startActivity(n); 
     break; 
      case 6: 
     Intent o = new Intent(getApplicationContext(),SettingsActivity.class); 
       startActivity(o); 
     break; 

     } 


     } 

    }); 
0

您需要在Listener上創建它將處理所有列表。事情是這樣的:

lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView arg6, View view, int position, long id) { 
swith(position){ 
     case 1: 
     Intent i = new Intent(getApplicationContext(), FillTreatmentActivity.class); 
      startActivity(i); 
      break; 
     case 2: 
     ... 
     } 
     } 
    }); 

或者你可以extends類ArrayAdaptyer,實現對每個元素單獨監聽