gpt4 book ai didi

android listview 监听器不起作用?

转载 作者:行者123 更新时间:2023-11-30 04:30:12 24 4
gpt4 key购买 nike

这是我的布局 main.xml ;

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:id="@+id/android:list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1" android:visibility="visible" android:clickable="true"/>

</LinearLayout>

这是扩展 ListActivity 的 MainActivity;

 public class MainActivity extends ListActivity {
private final List<SpinnerEntry> spinnerContent = new LinkedList<SpinnerEntry>();
private ListView contactListView;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
contactListView=getListView();
queryAllRawContacts();
registerForContextMenu(getListView());

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent i = new Intent(this, ContactDetailsActivity.class);
i.putExtra("hello", id);
// Activity returns an result if called with startActivityForResult

startActivity(i);
}

private void queryAllRawContacts() {


final String[] projection = new String[] {
RawContacts.CONTACT_ID, // the contact id column
RawContacts.DELETED // column if this contact is deleted
};

final Cursor rawContacts = managedQuery(
RawContacts.CONTENT_URI, // the uri for raw contact provider
projection,
null, // selection = null, retrieve all entries
null, // not required because selection does not contain parameters
null); // do not order

final int contactIdColumnIndex = rawContacts.getColumnIndex(RawContacts.CONTACT_ID);
final int deletedColumnIndex = rawContacts.getColumnIndex(RawContacts.DELETED);

spinnerContent.clear();
if(rawContacts.moveToFirst()) { // move the cursor to the first entry
while(!rawContacts.isAfterLast()) { // still a valid entry left?
final int contactId = rawContacts.getInt(contactIdColumnIndex);
final boolean deleted = (rawContacts.getInt(deletedColumnIndex) == 1);
if(!deleted) {
spinnerContent.add(queryDetailsForContactSpinnerEntry(contactId));
}
rawContacts.moveToNext(); // move to the next entry
}
}

rawContacts.close();
final ContactsSpinnerAdapater adapter = new ContactsSpinnerAdapater(spinnerContent, this);
contactListView.setAdapter(adapter);
}

这是我的自定义适配器类,名为 ContactsSpinnerAdapater ;

public class ContactsSpinnerAdapater extends BaseAdapter implements
SpinnerAdapter{
private final List<SpinnerEntry> content;
private final Activity activity;

public ContactsSpinnerAdapater(List<SpinnerEntry> content,
Activity activity) {
super();
this.content = content;
this.activity = activity;
}

public int getCount() {
return content.size();
}

public SpinnerEntry getItem(int position) {
return content.get(position);
}

public long getItemId(int position) {
return position;
}

public View getView(int position, View convertView,
ViewGroup parent) {
final LayoutInflater inflater = activity.getLayoutInflater(); // default layout inflater
final View spinnerEntry = inflater.inflate(
R.layout.row, null); // initialize the layout from xml
final TextView contactName = (TextView) spinnerEntry
.findViewById(R.id.cName);
final ImageView contactImage = (ImageView) spinnerEntry
.findViewById(R.id.userIcon);
final SpinnerEntry currentEntry = content.get(position);
contactName.setText(currentEntry.getContactName());
contactImage.setImageBitmap(currentEntry.getContactPhoto());
spinnerEntry.setOnClickListener(new OnClickListener(){


public void onClick(View arg0) {
// TODO Auto-generated method stub

}});
return spinnerEntry;
}




}

问题是,无论我尝试什么,当单击任何列表项时,我都无法启动 ContacDetailsActivity Intent 。基本上,监听器某种程度上未被激活。那么你能不能看看代码并告诉我我在哪里遗漏了它?

最佳答案

您将 Intent 起始代码放在了错误的位置。你需要输入这段代码:

    super.onListItemClick(l, v, position, id);
Intent i = new Intent(this, ContactDetailsActivity.class);
i.putExtra("hello", id);
// Activity returns an result if called with startActivityForResult

startActivity(i);

像这样在适配器中的 getView 方法中

public View getView(int position, View convertView,
ViewGroup parent) {
final int myFinalPosition = position;
final LayoutInflater inflater = activity.getLayoutInflater(); // default layout inflater
final View spinnerEntry = inflater.inflate(
R.layout.row, null); // initialize the layout from xml
final TextView contactName = (TextView) spinnerEntry
.findViewById(R.id.cName);
final ImageView contactImage = (ImageView) spinnerEntry
.findViewById(R.id.userIcon);
final SpinnerEntry currentEntry = content.get(position);
contactName.setText(currentEntry.getContactName());
contactImage.setImageBitmap(currentEntry.getContactPhoto());
spinnerEntry.setOnClickListener(new OnClickListener(){


public void onClick(View arg0) {
Intent i = new Intent(activity, ContactDetailsActivity.class);
i.putExtra("hello", getItemId(myFinalPosition));
// Activity returns an result if called with startActivityForResult

activity.startActivity(i);

}});
return spinnerEntry;
}

注意使用 Activity 变量来启动 Intent 。

关于android listview 监听器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com