2016-03-23 56 views
0

我有一个活动让我们打电话活动1在那里,我们将有一个由Player objetcs组成的ListView。当您点击ListView_item(在播放器上)时,一个新的活动开始,我们称之为活动2。我想要的是:StartActivityForResoult对ListViewItem单击Android

活动1发送到活动2玩家的名字和玩家的种族。在活动2中,用户可以编辑(玩家的名字和玩家的种族),并且当用户点击确认Ativity 2发送到活动1时,玩家的名字和玩家的种族即使我是用户没有编辑它(在这种情况下,它会发送之前的活动1已经发现了活动2)。

问题是,当我用suposse使用startActivityForResult我进入ListViewAdapter类,并使用context.start ... startActivityForResult不会出现。

public class AdaptadorJugadores extends BaseAdapter implements ListAdapter { 

private ArrayList<Jugador> list = new ArrayList<Jugador>(); 
private Context context; 


public AdaptadorJugadores(ArrayList<Jugador> list, Context context) { 
    this.list = list; 
    this.context = context; 
} 

@Override 
public int getCount() { 
    return list.size(); 
} 

@Override 
public Object getItem(int pos) { 
    return list.get(pos); 
} 

@Override 
public long getItemId(int pos) { 
    return 0; 
    //just return 0 if your list items do not have an Id variable. 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    if (view == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.item_lista_jugadores, null); 
    } 

    //Handle TextView and display string from your list 
    TextView TextoNombreJugador = (TextView)view.findViewById(R.id.etNombreJugador); 
    TextoNombreJugador.setText(list.get(position).getNombre()); 
    if (list.get(position).getGenero() == "Hombre"){ 
     TextoNombreJugador.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_face_black_24dp, 0, 0, 0); 
    }else{ 
     TextoNombreJugador.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_face_black_girl24dp, 0, 0, 0); 
    } 

    //Handle buttons and add onClickListeners 
    Button deleteBtn = (Button)view.findViewById(R.id.btEliminarJugador); 

    deleteBtn.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      //do something 
      list.remove(position); //or some other task 
      notifyDataSetChanged(); 
     } 
    }); 
    /*addBtn.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      //do something 
      notifyDataSetChanged(); 
     } 
    });*/ 
    view.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // Send single item click data to SingleItemView Class 
      Intent intent = new Intent(context, VistaJugador.class); 
      intent.putExtra("Nombre",(list.get(position).getNombre())); 
      intent.putExtra("Genero",(list.get(position)).getGenero()); 
      // Start SingleItemView Class 

     } 
    }); 

    return view; 
} 
} 
+0

你可以通过使用Activity来投射,但是你不会在适配器中获得onActivityResult(),所以更好的@ Francesc答案的用户方法。 – Harry

回答

0

您可以使用ListView的setOnItemClickListener(AdapterView.OnItemClickListener听众)方法,并在那里,你可以使用startActivityForResult开始活动。

mListView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        // get the data to pass to the activity based on the position clicked 
      Intent intent = new Intent(...); 
      intent.setExtra(...); 
      startActivityForResult(...); 
     } 
    }); 

或者,您可以通过活动,以您的适配器和使用,而不是背景,而是第一个解决方案是优选的。

0

我建议你将活动的上下文传递给适配器,然后将其存储在局部变量中。之后,您可以将其用于startActivityForResult,但请注意您必须实施onActivityResultMethod。我的建议是你使用一个接口,然后传递所选项目的ID并在Activity中调用startActivityForResult()。

+0

活动上下文(包含listview的活动)被存储到“上下文” –

相关问题