簡體   English   中英

從ListView啟動活動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM