2013-10-29 37 views
0

爲了受益於ABS的所有優點,我在SherlockActivity中更改了我的初始活動。爲此我使用ListAdapterAnSco extends BaseAdapter。 現在我想管理我的ListAdapter中的onclickonLongClickgetView。 我使用了幾種組合,但我無法做到。Android如何更改OnClickListener代碼中的OnItemClickListener代碼

注:我用的是SQLiteCursor獲得項目

原始OnItemClickListener代碼


public void onItemClick(AdapterView<?> parent, View v, int position, 
        long id) { 
       Intent intent = new Intent(getApplicationContext(),ListPeriode.class); 

       SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position); 
       String ansco=cr.getString(cr.getColumnIndex(DatabaseHelper.ANSCO)); 
       AnSco an=new AnSco(ansco); 
       an.setIdan((int)id); 

       Toast.makeText(getApplicationContext(), "Année Scolaire: "+an.getAnsco(), Toast.LENGTH_LONG).show(); 
       intent.putExtra("ANSCO_ID", an.getIdan()); 
       intent.putExtra("ANSCO_AN", an.getAnsco()); 
       cr.close(); 
       startActivity(intent); 
       finish(); 
      } 

如何在一個onclick梅索德做同樣的工作,改變這種代碼?

我getView


public View getView(final int position, View view, ViewGroup parent) { 
     final ViewHolder holder; 
     if (view == null) { 
      holder = new ViewHolder(); 
      view = inflater.inflate(R.layout.annee_sco_item, null); 
      // Locate the TextViews in listview_item.xml 
      holder.an = (TextView) view.findViewById(R.id.ansco_item); 
      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 
     // Set the results into TextViews 
     holder.an.setText(listAnsco.get(position).getAnsco()); 

     // Listen for ListView Item Click 
     view.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 


      } 
     }); 

     return view; 
    } 
+0

沒有你的onClickListener工作完美的課嗎? –

+0

將SQLiteCursor cr傳遞給您的適配器構造函數。 – sss

+0

你的onItemClick()在哪裏? –

回答

0

提取OnClickListener到單獨的類,並再次通過它

MyClickListener.java

public class MyClickListener implements onItemClickListener 
{ 
    @override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
    { 
     Intent intent = new Intent(getApplicationContext(),ListPeriode.class); 
     SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position); 
     String ansco=cr.getString(cr.getColumnIndex(DatabaseHelper.ANSCO)); 
     AnSco an=new AnSco(ansco); 
     an.setIdan((int)id); 
     Toast.makeText(getApplicationContext(), "Année Scolaire:"+an.getAnsco(), Toast.LENGTH_LONG).show(); 
     intent.putExtra("ANSCO_ID", an.getIdan()); 
     intent.putExtra("ANSCO_AN", an.getAnsco()); 
     cr.close(); 
     startActivity(intent); 
     finish(); 
    } 
} 
在適配器

刪除

// Listen for ListView Item Click 
    view.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
      } 
     }); 

YourActivity.java

@override 
onCraete(Bundle x) 
{ 
    ListView listView = (ListView) findViewById(R.i.your_list_id); 
    listView.setAdapter(new YourAdapter()); 
    listView.setOnItemClickListener(new MyClickListener()); 
} 
+0

我沒有作品 – jeff7

+0

不能覆蓋onItemClick在onClickListener – jeff7

+0

我將修改我的全部答案,並開始清理 –

0

你可以使用:

 holder.an.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      Intent intent = new Intent(contetx,ListPeriode.class); 

      SQLiteCursor cr=(SQLiteCursor)parent.getItemAtPosition(position); 
      String ansco=cr.getString(cr.getColumnIndex(DatabaseHelper.ANSCO)); 
      AnSco an=new AnSco(ansco); 
      an.setIdan((int)id); 

      Toast.makeText(context, "Année Scolaire: "+an.getAnsco(), Toast.LENGTH_LONG).show(); 
      intent.putExtra("ANSCO_ID", an.getIdan()); 
      intent.putExtra("ANSCO_AN", an.getAnsco()); 
      cr.close(); 
      startActivity(intent); 
      finish(); 

     } 
    }); 

和上下文必須傳遞給你延伸BaseAdapter

+0

這條線有錯誤: 'SQLiteCursor cr =(SQLiteCursor)parent.getItemAtPosition(position);' – jeff7