[英]Launching an activity from the ListView
public class ListItem
{
public int sname;
public int s_img;
public String sid;
}
Class xyz extends ListActivity
{
.
.
.
protected void onListItemClick(ListView l, View v, int position, long id)
{
//super.onListItemClick(l, v, position, id);
Toast.makeText(ListPage.this,items.get(position).sid,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(v.getContext(),DisplayScheme.class);
startActivityForResult(intent,0);
}
}
我希望從上面的xyz類開始一個新的Activity。 單擊列表中的一項時,活動應開始。 在下一個活動中,我希望顯示“ ListItem”對象的更多詳細信息。 s_img和sname; 有沒有一種方法可以將CLICKED ListItem對象傳遞給下一個DisplayScheme活動? 因為在下一個活動中無法找到在較早活動中單擊了哪個項目。 提前致謝。
..............編輯......
protected void onListItemClick(ListView l, View v, int position, long id)
{
//super.onListItemClick(l, v, position, id);
Toast.makeText(ListPage.this, items.get(position).sid, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(v.getContext(),DisplayScheme.class);
intent.putExtra("positionIdentifier",v.getTag());
startActivityForResult(intent,0);
}
這是我編輯的onListItemClick。 現在,我在“ intent.putextra”行上收到一條錯誤消息,該行顯示“ Intent類型的方法putExtra(String,boolean)不適用於參數(String,Object)”
.................更多編輯.. arrayadapter .......
public class MyAdapter extends BaseAdapter
{
LayoutInflater inflater;
List<ListItem> items;
public MyAdapter(Activity context, List<ListItem> items)
{
super();
this.items = items;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position)
{
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
ListItem item = items.get(position);
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_row, null);
ImageView imgv = (ImageView)vi.findViewById(R.id.s_name);
imgv.setImageResource(item.sname);
return vi;
}
}
這是我的MyAdapter類,我到底需要在哪里進行諸如“ setTag()”或dat之類的更改?
這個看起來不錯:
Toast.makeText(ListPage.this,items.get(position).sid,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(v.getContext(),DisplayScheme.class);
startActivityForResult(intent,0);
但是,建議不要使用v.getContext()
: xyz.this
。
另外,如果您不期望從DisplayScheme
活動返回結果,則無需使用startActivityForResult()
。 您應該只使用startActivity()
並將intent
實例傳遞給它。
如果您需要使用Intent
發送數據,則可以使用一個簡單的intent.putExtra(SOME_KEY_NAME, THE_VALUE_YOU_WANT_TO SEND);
會為你做。
如果要將數據發送到另一個Activity,則無需使用startActivityForResult()
。 當您想從另一個活動取回某些結果時,可以使用它。
編輯:
好的,因此在“活動”中還應該具有相應的List<ListItem> items;
收集數據並傳遞給適配器,對嗎? 您仍然沒有為該活動發布該代碼。 但是,看看是否有幫助。 您可能需要四處尋找正確的方法。
Toast.makeText(ListPage.this,items.get(position).sid,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(v.getContext(),DisplayScheme.class);
intent.putExtra("SOME_KEY_NAME", items.get(position).sname;
startActivityForResult(intent,0);
如果使用POJO( setter和getter )處理數據,然后再將其傳遞給List<ListItem> items;
,在活動中發布盡可能多的詳細信息會有所幫助。
是。 有可能的。 您可以使用setTag()
在適配器的getView()
方法(例如setTag(position)
為每個列表項保留標識符。 因此,您可以使用onClick()
方法從視圖中獲取標記,然后將其發送到具有intent.putExtra("positionIdentifier",view.getTag());
類的其他內容的下一個活動intent.putExtra("positionIdentifier",view.getTag());
是的,您可以在開始活動時放入一些數據
這部分必須在OnItemClickListener中
Intent intent = new Intent(CurrentClass.this, ActivityForStart.class);
intent.putExtra("name_of_variable", variable);
startActivity(intent);
在新活動中
intent.getStringExtra("name_of_variable")));
它將v.getTag()視為對象。 如果您將標記值作為字符串,則必須強制轉換字符串並通過在v.getTag()之后放置“ .toString()”來傳遞值。
注意:它僅適用於String傳遞。 您可以通過強制轉換對其他值執行相同的操作。
這是我編輯的onListItemClick。 現在,我在“ intent.putextra”行上收到一條錯誤消息,該行顯示“ Intent類型的方法putExtra(String,boolean)不適用於參數(String,Object)”
這是因為getTag()返回了一個對象,這是因為您可以在其中放置任何所需的對象。
如果您在其中放置了布爾值,只需對其進行轉換,就可以開始了。
如果您在其中放置了其他內容(例如viewHolder),請決定要放置的內容並進行投射。
這是您的代碼可以使用的簡單修改:
在適配器中:
@Override
public ListItem getItem(int position)
{
return items.get(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
ListItem item = getItem(position);
//... same as before, but please use viewHolder
}
在適配器外部,在活動“ xyz”中(應將其重命名為大寫字母btw):
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
Intent intent = new Intent(this,DisplayScheme.class);
intent.putExtra("selectedImageToShow",_adapter.getItem(position).s_img);
startActivityForResult(intent,0);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.