【问题标题】:StartActivityForResoult on ListViewItem click AndroidListView 项目上的 StartActivityForResult 单击 Android
【发布时间】:2016-03-23 00:02:20
【问题描述】:

我有一个活动,我们称之为 Activity 1,我们将有一个由 Player objetcs 组成的 ListView。当您单击 ListView_item(在 Player 上)时,一个新的活动开始,我们称之为 Activity 2。我想要的是:

活动 1 向活动 2 发送玩家的姓名和玩家的种族。在活动 2 中,用户可以编辑它(玩家的姓名和玩家的种族),当用户单击确认活动 2 时,即使用户没有编辑它,也会将玩家的姓名和玩家的种族发送到活动 1(在这种情况下,它会发送之前 Activity 1 已发送到 Activity 2)。

问题是当我想使用 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;
}
}

【问题讨论】:

  • 您可以通过使用 Activity 进行强制转换来做到这一点,但您不会在适配器内获得 onActivityResult(),因此@Francesc 的答案是更好的用户方法。

标签: android listview android-intent listadapter


【解决方案1】:

您可以使用 ListView 的 setOnItemClickListener(AdapterView.OnItemClickListener listener) 方法,并在其中使用 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(...);
        }
    });

或者,您可以将 Activity 传递给您的适配器并使用它而不是上下文,但第一个解决方案更可取。

【讨论】:

    【解决方案2】:

    我建议您将上下文从 Activity 传递给 Adapter,然后将其存储在局部变量中。之后,您可以使用它来启动ActivityForResult,但请注意您必须实现onActivityResultMethod。我的建议是你使用一个接口,然后传入选中项的ID,在Activity中调用startActivityForResult()。

    【讨论】:

    • activity上下文(包含listview的activity)存入“context”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    相关资源
    最近更新 更多