【发布时间】:2014-05-23 22:18:16
【问题描述】:
我是安卓编程新手。我正在开发 android 应用程序,我有一个列表视图,其中 2 个文本视图中的多个文本视图是可点击的。如果用户点击“电话”textView,它应该呼叫该号码,如果用户点击“street_address”textView,它应该使用谷歌地图路由它。以下是我的适配器类的代码
class ListViewHolder {
TextView name;
TextView street_address;
TextView phone;
TextView distance;
ListViewHolder(View v)
{
name = (TextView) v.findViewById(R.id.name);
street_address = (TextView) v.findViewById(R.id.address);
phone = (TextView) v.findViewById(R.id.phone);
distance = (TextView) v.findViewById(R.id.distance);
}
}
public class ListDisplayAdapter extends BaseAdapter
{
Context mcontext = null;
public List<NameAddress> listData;
public ListDisplayAdapter(Context context, List<NameAddress> list)
{
mcontext = context;
this.listData = list;
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int i)
{
return listData.get(i);
}
@Override
public long getItemId(int i)
{
return i;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup)
{
View row = view;
ListViewHolder holder = null;
if (row == null)
{
LayoutInflater inflater =(LayoutInflater) mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_row, viewGroup, false);
holder=new ListViewHolder(row);
row.setTag(holder);
}
else
{
holder = (ListViewHolder) row.getTag();
}
NameAddress data = listData.get(position);
holder.name.setText(data.getName());
holder.phone.setText(data.getPhone());
holder.street_address.setText(data.toString());
holder.distance.setText(data.getDistance());
return row;
}
}
以下是活动类的hte代码
public class ListDisplayActivity extends Activity
{
ListView listView;
public String tag_name;
public List<NameAddress> nameAddressList;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_display);
listView = (ListView) findViewById(R.id.list);
Intent intent = getIntent();
if(intent!= null)
{
tag_name = intent.getStringExtra("DashItemName");
}
nameAddressList = null;
try
{
XMLDOMParserHandler parser = new XMLDOMParserHandler(tag_name);
nameAddressList = parser.parseXML(getAssets().open("data.xml"));
ListDisplayAdapter listAdapter = new ListDisplayAdapter(this, nameAddressList);
listView.setAdapter(listAdapter);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
请告诉我如何编码
【问题讨论】:
-
您的 onClickListener 在哪里?您需要将它们附加到您的文本视图中。您可以将您的数据对象(NameAddress)传递给您的持有人,并一次性初始化您的文本视图 + 设置 onclick。
-
@rootstertech 我尝试将 onClickListner 附加到 texView,但是当我在其中使用意图来启动活动时,它给出了错误。
-
@roostertech 是对的,你需要附加 OnClickListeners。你遇到了什么错误?
-
@roostertech ListViewHolder 类型的 startActivity() 方法未定义
-
@Akshay,必须在上下文中调用 startActivity。您的适配器中有上下文,将其传递给您的视图持有者。
标签: android listview android-listview onclicklistener