2013-01-15 103 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