2013-01-15 50 views
0

我一直在試圖創建一個可點擊的列表視圖,它需要一個字符串數組和一些圖像,並以textview樣式呈現它們。到目前爲止,我已經設法創建一個與每個字符串和圖像的列表視圖,但我不確定如何使用onClick方法,以使textviews可點擊開始新的活動等。製作自定義Android ListView適配器可點擊

這是我的代碼到目前爲止(不包括XML):

public class MySimpleArrayAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public MySimpleArrayAdapter(Context context, String[] values) { 
    super(context, R.layout.activity_test2, values); 
    this.context = context; 
    this.values = values; 
} 

    /* Print a toast when a list item is clicked, don't know what to do */ 
public void onClick() { 
    switch (list item) { 
    case 0: 
     Toast.makeText(this.context, "Pressed!", Toast.LENGTH_LONG).show() 
     break; 
    } 
      case 1: 
        etc.... 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View rowView = inflater.inflate(R.layout.activity_test2, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.label); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); 
    textView.setText(values[position]); 

    String s = values[position]; 
    if (s.startsWith("Report a Road Delay")) { 
     imageView.setImageResource(R.drawable.ic_menu_compose); 
    } else if (s.startsWith("View Reported Delays")) { 
     imageView.setImageResource(R.drawable.ic_menu_view); 
    } else if (s.startsWith("Search a Road for Delays")) { 
     imageView.setImageResource(R.drawable.ic_menu_search); 
    } else if (s.startsWith("Update a Delay Report")) { 
     imageView.setImageResource(R.drawable.ic_menu_edit); 
    } else if (s.startsWith("Validate a Delay Report")) { 
     imageView.setImageResource(R.drawable.ic_menu_mark); 

    } 
    return rowView; 
    } 
} 

public class MainActivity extends ListActivity { 
public void onCreate(Bundle SavedInstanceState) { 
    super.onCreate(SavedInstanceState); 
    String[] values = new String[] { "Report a Road Delay", 
      "View Reported Delays", "Search a Road for Delays", 
      "Update a Delay Report", "Validate a Delay Report" }; 
    MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(this, values); 
    setListAdapter(adapter); 

} 

} 

這是它的外觀到目前爲止:

enter image description here

所有我基本上不明白的是OnClick方法;它需要什麼參數,以及如何確定哪個項目被點擊。任何幫助,將不勝感激。

+0

看看嘗試貼出的解決方案,將幫助你。 –

回答

3

試試這個:

ListView list1 = getListView(); 

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

         //Take action here. 
       } 
      } 
); 
+0

輝煌這工作完美,謝謝! –

+0

@DanCoghlan你永遠受到歡迎。 –

2

你正在尋找一個OnItemClickListener,而不是一個OnClickListener

lv.setOnItemClickListener(new OnItemClickListener(){ 

    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     // DO SOMETHING WITH CICK EVENT HERE 
    } 
} 

現在只鐵餅PARAMS:

parent The AdapterView where the click happened. 
view  The view within the AdapterView that was clicked 
position The position of the view in the adapter. 
id  The row id of the item that was clicked. 

我拿到了最後部分來自Android的參考

+0

你可以創建一個新的OnItemClickListener,或者你可以讓一個類實現onItemClickListener – Tobrun

+0

感謝隊友,讓它工作。 –

1

您可以使用此代碼:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

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


      // We know the View is a <extView so we can cast it 
      TextView clickedView = (TextView) view; 

      Toast.makeText(MainActivity.this, "Item with id ["+id+"] - Position ["+position+"] - Planet ["+clickedView.getText()+"]", Toast.LENGTH_SHORT).show(); 

     } 
     }); 

     // we register for the contextmneu   
     registerForContextMenu(lv); 
    } 

其中LV是ListView控件。 如果你想添加的上下文菜單:

// We want to create a context Menu when the user long click on an item 
@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 

    super.onCreateContextMenu(menu, v, menuInfo); 
    AdapterContextMenuInfo aInfo = (AdapterContextMenuInfo) menuInfo; 

    // We know that each row in the adapter is a Map 
    Planet planet = aAdpt.getItem(aInfo.position); 

    menu.setHeaderTitle("Options for " + planet.getName()); 
    menu.add(1, 1, 1, "Details"); 
    menu.add(1, 2, 2, "Delete"); 

} 




// This method is called when user selects an Item in the Context menu 
@Override 
public boolean onContextItemSelected(MenuItem item) { 
    int itemId = item.getItemId(); 
    AdapterContextMenuInfo aInfo = (AdapterContextMenuInfo) item.getMenuInfo(); 
    planetsList.remove(aInfo.position); 
    aAdpt.notifyDataSetChanged(); 
    return true; 
} 

如果你想有更多的信息給我的博客上herehere