2016-03-23 40 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的活動)被存儲到「上下文」 –

相關問題