2012-04-24 155 views
13

我想創建列表視圖。我從JSON中獲得了價值。在這裏,我從json的值到listview,但我無法得到onItemclickListener方法。爲什麼發生這種情況我不知道,請幫我編碼,如下所示。如何創建列表視圖onItemclicklistener

Logcat不顯示任何東西。

謝謝。

<ListView 
    android:id="@+id/contests_listView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/header" 
    android:focusable="true"> 
</ListView> 

Activity.java

public class Activites_Activity extends CheerfoolznativeActivity { 

private ListView contests_listView; 
private ProgressBar pgb; 
ActivitiesBean bean; 
ArrayList<Object> listActivities; 
ListAdapter adapter; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_listview); 
    setHeader("Activites"); 


    contests_listView = (ListView) findViewById(R.id.contests_listView); 
    pgb = (ProgressBar) findViewById(R.id.contests_progressBar); 
    listActivities = new ArrayList<Object>(); 

    new FetchActivitesTask().execute(); 

} 

public class FetchActivitesTask extends AsyncTask<Void, Void, Void> { 

    int i =0; 
    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     pgb.setVisibility(View.VISIBLE); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     String url = "my json URL"; 
     String strResponse = util.makeWebCall(url); 

     try { 

      //my json logic here   
     } 
     catch (JSONException e) { 

      e.printStackTrace(); 

     } 

     return null; 
    } 

    @Override 
    public void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     pgb.setVisibility(View.GONE); 
     displayAdapter(); 
    } 
} 

public void displayAdapter() 
{ 
    adapter = new ListAdapter(this, listActivities); 
    contests_listView.setAdapter(adapter); 
    contests_listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int position, long id) { 

      // Toast.makeText(getApplicationContext(),"Title => "+items.get(position), Toast.LENGTH_SHORT).show(); 

      System.out.println("=========== Click"); 
      bean = (ActivitiesBean) adapter.getItem(position); 

      Intent in1 = new Intent(Activites_Activity.this, Activity_display.class); 
      in1.putExtra("ActivityObject", bean); 
      startActivity(in1); 
     } 
    }); 


} 
} 

我也用這個

contests_listView.setItemsCanFocus(true); 
+0

它顯示在ListView項目?並打印出===========單擊一個項目時在日誌中點擊'? – waqaslam 2012-04-24 09:34:47

+0

你嘗試過setOnItemSelectedListener嗎?我認爲它可能默認調用這個監聽器? – MikeIsrael 2012-04-24 09:46:27

+0

@Waqas,是的,我在listview中獲得了值,但不顯示點擊日誌,也不顯示吐司。 – 2012-04-24 09:59:07

回答

21

試試這個:

contests_listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
     String item = (String) contests_listView.getItemAtPosition(position); 
     Toast.makeText(this,"You selected : " + item,Toast.LENGTH_SHORT).show();     
    } 
}); 
+0

謝謝,但它不工作,請讓我知道如果有其他解決方案,這個問題。 – 2012-04-24 10:24:33

+0

但是你得到什麼錯誤?如果logcat不提供任何輸出,則嘗試通過DDMS重置ADB。 – GAMA 2012-04-24 10:32:26

+1

我得到的'contests_listView'必須聲明爲final嗎? – Dan 2016-12-13 21:03:26

0

試試這個代碼:

protected void onListItemClick(ListView l, View v, int position, long id) { 

super.onListItemClick(l, v, position, id); 

Toast.makeText(this, "message", Toast.LENGTH_LONG).show(); 
} 
+0

最後,我得到了解決方案,我錯誤地把ScrollView放到我的listitem中,刪除它之後工作。 – 2012-04-25 08:16:04

0

使用:

contests_listView.setOnItemClickListener(new AdapaterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int position, long id) { 

      Intent in1 = new Intent(Activites_Activity.this, Activity_display.class); 

      startActivity(in1); 
     } 
    });