0
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 クラスから新しいアクティビティを開始したいと考えています。リストの項目の 1 つがクリックされると、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 などの変更を正確に行う必要があるのはどこですか?

4

5 に答える 5

1

これは、ほとんど見栄えがします:

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

また、DisplaySchemeActivity から結果が返されることを期待していない場合は、 を使用する必要はありませんstartActivityForResult()。だけを使用して、インスタンスをそれにstartActivity()渡す 必要があります。intent

を使用してデータを送信する必要がある場合はIntent、簡単な方法で送信できintent.putExtra(SOME_KEY_NAME, THE_VALUE_YOU_WANT_TO SEND);ます。

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 (セッター および ゲッター) を使用してデータを処理してから に渡す場合は、それとList<ListItem> items;、アクティビティからできるだけ多くの詳細を投稿すると、さらに役立ちます。

于 2013-05-04T08:09:18.333 に答える
0

はい、活動開始時にデータを入れることができます

この部分は OnItemClickListener にある必要があります

Intent intent = new Intent(CurrentClass.this, ActivityForStart.class);
intent.putExtra("name_of_variable", variable);
startActivity(intent);

新しい活動で

intent.getStringExtra("name_of_variable")));
于 2013-05-04T08:07:43.620 に答える