Android onclick监听器自定义listview
Posted
技术标签:
【中文标题】Android onclick监听器自定义listview【英文标题】:Android onclick listener custom listview 【发布时间】:2015-04-19 10:11:29 【问题描述】:使用以下代码,我可以正确地从 mysql db 接收动态列表并将元素放入列表视图中。
public class MenuActivity extends ListActivity implements FetchDataListener
private ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
initView();
private void initView()
// show progress dialog
dialog = ProgressDialog.show(this, "", "Loading..");
String url = "http://www.*********.php";
FetchDataTask task = new FetchDataTask(this);
task.execute(url);
@Override
public void onFetchComplete(List<Application> data)
// dismiss the progress dialog
if(dialog != null) dialog.dismiss();
// create new adapter
ApplicationAdapter adapter = new ApplicationAdapter(this, data);
// set the adapter to list
setListAdapter(adapter);
@Override
public void onFetchFailure(String msg)
// dismiss the progress dialog
if(dialog != null) dialog.dismiss();
// show failure message
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
这是我的数组适配器:
public class ApplicationAdapter extends ArrayAdapter<Application>
private List<Application> items;
public ApplicationAdapter(Context context, List<Application> items)
super(context, R.layout.app_cat_list, items);
this.items = items;
@Override
public int getCount()
return items.size();
@Override
public View getView(int position, View convertView, ViewGroup parent)
View v = convertView;
if(v == null)
LayoutInflater li = LayoutInflater.from(getContext());
v = li.inflate(R.layout.app_cat_list, null);
Application app = items.get(position);
if(app != null)
TextView titleText = (TextView)v.findViewById(R.id.titleTxt);
if(titleText != null) titleText.setText(app.getTitle());
return v;
现在我想单击单行并打开另一个通过 Intent extra 传递一些值的活动。 我应该在哪里实现点击监听器? 我很确定它应该插入到“getView”中,但我如何通过意图传递 app.getTitle()?我知道一般如何通过额外的意图,尝试但没有点击发生。 任何帮助将不胜感激,谢谢
【问题讨论】:
【参考方案1】:现在我想单击单行并打开另一个通过的活动 通过意图额外的一些值。我应该在哪里实现点击监听器?
不需要添加OnItemClickListener
,因为在MenuActivity
中扩展了ListActivity,所以只需覆盖onListItemClick
处理ListView行点击的方法:
@Override
public void onListItemClick(ListView l, View view, int position, long id)
// your code here...
我如何通过意图传递 app.getTitle()?
使用view
参数获取onListItemClick
中选中行TextView的值:
TextView txtView=(TextView)v.findViewById(R.id.titleTxt);
String selectedText=txtView.getText().toString();
使用selectedText
在下一个活动中通过 Intent 发送值
【讨论】:
【参考方案2】:把它放在你的 getView() 中
v.setOnClickListener(new OnClickListener()
@Override
public void onClick(View arg0)
Intent intent =new Intent(context, YourActivity.class);
context.startActivity(intent);
);
【讨论】:
【参考方案3】:可以有多种方式,以下是其中之一:
在您的活动中的列表视图上设置 onItemClickListner,它会给您一个回调,即 onListItemClick。但是正如你所说,你想要他们的标题,你必须在 getView 方法中的 convertView 上设置标签,比如 covertView.setTag("itemTitle");并在您的 onListItemClick 中从视图中获取标签并将其转换为像这样的标题 v.getTag().toString();并将其设置在您想要的任何位置。 以下是完整代码:
@Override
public void onListItemClick(ListView l, View view, int position, long id)
String title = view.getTag().toString();
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("title", title);
startActivity(intent);
// your code here...
如果卡在任何地方,请发布。
【讨论】:
以上是关于Android onclick监听器自定义listview的主要内容,如果未能解决你的问题,请参考以下文章
转Android - Button(按钮)的响应点击事件的4种写法
Android:RecyclerView onClick 监听器没有得到