2012-12-26 51 views
0

我用自己的適配器創建了一個listview,但現在我必須實現setOnClickListener方法嗎? 閱讀我的手冊並在網上搜索我已經看到它在這種情況下無法正常工作,有人可以解釋我如何正確使用它,也許有一個例子嗎?onClickListener如何在ListView中不在ListActivity中工作?

這是我MainActivity.java

package com.gabriele.progetti; 


import android.os.Bundle; 
import android.app.Activity; 
import android.app.ListActivity; 
import android.content.res.AssetManager; 
import android.graphics.Typeface; 
import android.view.Menu; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class MainActivity extends Activity 
{ 
    TextView textview; 
    ListView menu; 
    final static String[] Scelte = new String[] {"Una citazione a caso", "Cerca per autore", "Cerca per categoria", "Crediti"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     /* Comincio tutti i magheggi per prendere il font e settarlo */ 
     AssetManager assetManager = getResources().getAssets(); 
     Typeface typeface = Typeface.createFromAsset(assetManager, "fonts/stilo.otf"); 
     textview = (TextView) findViewById(R.id.textView1); 
     textview.setTypeface(typeface); 
     /* Magheggi finiti */ 

     menu = (ListView) findViewById(R.id.listView1); 
     //SetAdapter e non setlistAdapter perchè non sto usando ListActivity. 
     // Gli passo la classe MenuAdapter con un context proprio e la stringa Scelte. 
     menu.setAdapter(new MenuAdapter(this, Scelte)); 

    } 


} 

這是我MenuAdapter.java

package com.gabriele.progetti; 

import java.util.List; 

import android.content.Context; 
import android.content.res.AssetManager; 
import android.graphics.Color; 
import android.graphics.Typeface; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class MenuAdapter extends ArrayAdapter<String> 
{ 
    private final Context context; 
    private final String[] valori; 

    public MenuAdapter(Context context, String[] valori) 
    { 
     // TODO Auto-generated constructor stub 
     super(context, R.layout.activity_main, valori); 
     this.context = context; 
     this.valori = valori; 

    } 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     // Dico al service di Android di prepararsi ad una animazione (inflate = animare). 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     // Prendo tutte le View all'interno del file XML row_modificata e le metto nella ViewAnimata. 
     View ViewAnimata = inflater.inflate(R.layout.row_modificata, parent, false); 

     // Dichiaro un context perchè in un arrayadapter se voglio prendere un asset devo utilizzarlo per forza. 
     Context context1 = context; 
     AssetManager assetManager = context1.getResources().getAssets(); 

     TextView textView = (TextView) ViewAnimata.findViewById(R.id.textView2); 
     Typeface typeface = Typeface.createFromAsset(assetManager, "fonts/menu.ttf"); 
     textView.setTypeface(typeface); 
     textView.setText(valori[position]); // Assegno un testo per ogni valore presente nella stringa che passo. 

     return ViewAnimata; 

    } 

謝謝!

回答

2

在MainActivity添加以下代碼:

menu.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
      Toast.makeText(activity, "Pressed " + position, Toast.LENGTH_SHORT).show(); 

     } 
    }); 
+0

立即找到該方法的位置?這是一個標準的片段還是無處不在? – Eulante

+0

是的,方法找到的位置,並且這個方法無處不在 –

+0

非常感謝! – Eulante

0

一個評論。 使用適配器內的convert視圖會更好,並且不會每次都創建一個新視圖。

View itemView; 
    if (convertView == null) { 
     itemView = inflater.inflate(R.layout.row_modificata, parent, false); 
    } else { 
     itemView = convertView; 
    } 
    //set your data here 
+0

謝謝,所以我只創建一個視圖,如果需要的權利? :) – Eulante

+0

是的,你是對的。 – akarimova

相關問題