【问题标题】:How to make listView with multiple clickable textViews如何使用多个可点击的 textView 制作 listView
【发布时间】: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


【解决方案1】:

试试这个,

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);
holder = new ListViewHolder();
            row = inflater.inflate(R.layout.list_row, viewGroup, false);
             name = (TextView) v.findViewById(R.id.name);
        holder.street_address = (TextView) v.findViewById(R.id.address);
        holder.phone = (TextView) v.findViewById(R.id.phone);
        holder.distance = (TextView) v.findViewById(R.id.distance);
            row.setTag(holder);
        } 
        else 
        {
            holder = (ListViewHolder) row.getTag();
        }
        NameAddress data = listData.get(position);
        holder.name.setText(data.getName());
        holder.phone.setText(data.getPhone());
holder.phone.settag(data.getPhone());
        holder.street_address.setText(data.toString());
holder.street_address.settag(data.toString());
        holder.distance.setText(data.getDistance());

 holder.phone.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
            String phoneno = ((Textview)v).gettag();
    }
});

holder.street_address.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
            String streetaddress = ((Textview)v).gettag();
    }
});
        return row;

    }

class ListViewHolder {
    TextView name;
    TextView street_address;
    TextView phone;
    TextView distance;
}


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多