2013-02-02 55 views
2

我正在创建一个内部有联系人列表的应用程序。目前该列表正常工作,并以我想要的方式显示我的所有联系人。不过,我需要为它们添加一个点击功能。我想打电话给他们,一旦我按下其中一个。我怎样才能做到这一点?由于rss阅读器的原因,我在同一个活动中已经有了一个onListItemClick方法。我如何过滤它?看看我的代码:listview onclick android

 //Load contacts into ListView on people screen 
    contactListView = (ListView) findViewById(R.id.contactsListView); 
    contactstock = new ArrayList<ContactStock>(); 

    mCursor = managedQuery(ContactsContract.Data.CONTENT_URI, null, Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'", null, 
      ContactsContract.Data.DISPLAY_NAME + " ASC"); 
    int number = mCursor.getColumnIndex(Phone.NUMBER);  
    int name = mCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME); 
    while (mCursor.moveToNext()) { 
     String phName = mCursor.getString(name); 
     String phNumber = mCursor.getString(number); 
     contactstock.add(new ContactStock(phName, phNumber)); 
    } 
    contactListView.setAdapter(new ContactListAdapter(MainActivity.this, 
      contactstock)); 

ContactStock.java:

public class ContactStock { 

    private String name; 
    private String number; 

    public ContactStock(String name, String number) { 
     this.name = name; 
     this.number = number; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setNumber(String number) { 
     this.number = number; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public String getNumber() { 
     return this.number; 
    } 

} 

ContactListAdapter.java:(对RSS阅读器)

public class ContactListAdapter extends ArrayAdapter { 
private final Activity activity; 
private final List stocks; 

public ContactListAdapter(Activity activity, List objects) { 
    super(activity, R.layout.listview_detail_tab_contact_list, objects); 
    this.activity = activity; 
    this.stocks = objects; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View rowView = convertView; 
    ContactStockView sv = null; 
    if (rowView == null) { 
     // Get a new instance of the row layout view 
     LayoutInflater inflater = activity.getLayoutInflater(); 
     rowView = inflater.inflate(
       R.layout.listview_detail_tab_contact_list, null); 

     // Hold the view objects in an object, 
     // so they don't need to be re-fetched 
     sv = new ContactStockView(); 
     sv.name = (TextView) rowView.findViewById(R.id.contact_name); 

     sv.number = (TextView) rowView.findViewById(R.id.contact_number); 

     // Cache the view objects in the tag, 
     // so they can be re-accessed later 
     rowView.setTag(sv); 
    } else { 
     sv = (ContactStockView) rowView.getTag(); 
    } 
    // Transfer the stock data from the data object 
    // to the view objects 
    ContactStock currentStock = (ContactStock) stocks.get(position); 
    sv.name.setText(currentStock.getName()); 
    sv.number.setText(currentStock.getNumber()); 

    // TODO Auto-generated method stub 
    return rowView; 
} 

protected static class ContactStockView { 
    protected TextView name; 
    protected TextView number; 
} 
} 

我当前的列表视图代码:

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    Uri uri = Uri.parse(links.get(position).toString()); 
    Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
    startActivity(intent); 
} 

ListView row xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal" > 


<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:src="@drawable/defaultavatar" /> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 


    <TextView 
     android:id="@+id/contact_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginTop="5dp" 
     android:text="Who am I" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 


    <TextView 
     android:id="@+id/contact_number" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="20dp" 
     android:text="000000000" /> 

</LinearLayout> 

</LinearLayout> 

我从接触我拍了拍通过使用此代码得到的电话号码:

contactstock.get(arg2).getNumber() 
+0

严重我还没有明白你想要什么.......解释清楚你想实现什么 – Pragnani

+0

好的,所以我有一个应用程序。在里面我有两个列表视图。一个用于rss,另一个用于联系人。我已经成功地将所有联系人加载到列表视图中,使用一个id到列表视图。另一个使用getListView()。一旦你点击它,rss应用程序需要一个打开主题的方法。 onListItemClick()方法具有该操作的响应性。我需要添加点击功能到我的联系人屏幕,但由于我已经使用onListItemClick()方法,我需要该方法来调用联系人一旦我点击它,并且不会与rss阅读器 – user1446632

+0

混淆,所以你想处理两个listview的onClick在onListItemClick方法权......然后在onListItemClick方法中,第一个参数是listview检查listview id是否与联系人联系,如果联系人不是调用相应的方法,如果(l.getId)() == R.id.yourlistid){do something} else {do something},是你想要的吗 – Pragnani

回答

3

您应该为每个设置listview并设置onItemClickListener。

ListView l1 = (ListView)findViewById(R.id.list1); 
ListView l2 = (ListView)findViewById(R.id.list2); 

// listener for the first one 
l1.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 

     } 

    }); 

// listener for the other 
l2.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 

     } 

    }); 
+0

谢谢,我已经实现它,它的工作原理。我只需要一个用于调用联系人的功能。 – user1446632

1

我想你说的是你有2列表视图。 您可以将setOnItemClickListener用于listview,而不是使用onListItemClick。

contactListView.setOnItemClickListener(new OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      // TODO Auto-generated method stub 

     }}); 
+0

它应该是AdapterView.OnItemClickListener() –