1

我正在尝试使用一些 ImageButtons 创建一个 GridView,但我无法对这些 ImageButtons 进行 onClick。我想让这些点击打开其他活动/片段,但我无法获得 ImageButton 的位置来做到这一点。

如何获得 ImageButton 的位置以单击?

网格视图

适配器 XML

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/llPrincipal">

    <ImageButton
        android:id="@+id/ibPlano"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        android:background="#00000000"
        android:focusable="false"
        />

    <TextView
        android:id="@+id/tvPlano"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:gravity="center"
    />

</LinearLayout>

主要片段

public class PrincipalFrag extends Fragment implements View.OnClickListener, AdapterView.OnItemClickListener{
    private List<Permissoes> permissoesTela = new ArrayList<Permissoes>();
    private GridView gridView;
    private PrincipalAdapter principalAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.principal_frag, container, false);

        gridView = (GridView)view.findViewById(R.id.gridView);

        return  view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        principalAdapter = new PrincipalAdapter(getView().getContext(), getPermissoesTela());
        gridView.setAdapter(principalAdapter);
    }

    @Override
    public void onClick(View v) {

    }

    private List<Permissoes> getPermissoesTela(){
        ////agenda, despesa, enviar, alterar estoque bloqueados
        Usuario usuario = KontroleConfigs.PESSOA;

        //venda
        Permissoes venda = new Permissoes();
        venda.setVenda(usuario.getPlano().getPermissoes().getVenda());
        //agenda
        Permissoes agenda = new Permissoes();
        agenda.setAgenda(usuario.getPlano().getPermissoes().getAgenda());
        //cadastro
        Permissoes cadastro = new Permissoes();
        cadastro.setCadastro(1);
        //despesas
        Permissoes despesas = new Permissoes();
        despesas.setLancamento_dispesas(usuario.getPlano().getPermissoes().getLancamento_dispesas());
        //enviar
        Permissoes enviar = new Permissoes();
        enviar.setEnviar_relatorio_txt(usuario.getPlano().getPermissoes().getEnviar_relatorio_txt());
        //meus dados
        Permissoes meusDados = new Permissoes();
        meusDados.setMeusDados(1);
        //recebimentos pendentes
        Permissoes recebimentosPendentes = new Permissoes();
        recebimentosPendentes.setRecebimentos_pendentes(usuario.getPlano().getPermissoes().getRecebimentos_pendentes());
        //entregas pendentes
        Permissoes entregasPendentes = new Permissoes();
        entregasPendentes.setEntregas_pendentes(usuario.getPlano().getPermissoes().getEntregas_pendentes());
        //alterar estoque
        Permissoes alterarEstoque = new Permissoes();
        alterarEstoque.setAlterar_estoque(usuario.getPlano().getPermissoes().getAlterar_estoque());

        permissoesTela.add(venda);
        permissoesTela.add(agenda);
        permissoesTela.add(cadastro);
        permissoesTela.add(despesas);
        permissoesTela.add(enviar);
        permissoesTela.add(meusDados);
        permissoesTela.add(recebimentosPendentes);
        permissoesTela.add(entregasPendentes);
        permissoesTela.add(alterarEstoque);

        return permissoesTela;
    }


    @Override
    public void onPause() {
        super.onPause();
        CustomVolleySingleton.getInstance().cancelPendingRequests(CustomVolleySingleton.TAG);
    }


    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Log.i("POSITION BUTTON IN GRID VIEW->", position + "");
    }
}

主适配器

public class PrincipalAdapter extends BaseAdapter {
    private Context context;
    private List<Permissoes> lista;

    public PrincipalAdapter(Context context, List<Permissoes> lista) {
        this.context = context;
        this.lista = lista;
    }

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

    @Override
    public Object getItem(int position) {
        return lista.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        Usuario usuario = KontroleConfigs.PESSOA;

        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.principal_adapter, parent, false);

            viewHolder.llPrincipal = (LinearLayout) convertView.findViewById(R.id.llPrincipal);
            viewHolder.ibPlano = (ImageButton) convertView.findViewById(R.id.ibPlano);
            viewHolder.tvPlano = (TextView) convertView.findViewById(R.id.tvPlano);

            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder)convertView.getTag();
        }

        //permissoes
        Permissoes p = lista.get(position);

        //plano lite
        ////agenda, despesa, enviar, alterar estoque bloqueados
        if(usuario.getPlano().getNome().contains("Bronze Lite")){
            if(p.getVenda() != null){
                if(p.getVenda() > 0){
                    viewHolder.ibPlano.setImageResource(R.drawable.vendas);
                    viewHolder.ibPlano.setEnabled(true);
                }else{
                    viewHolder.ibPlano.setImageResource(R.drawable.vendas_2);
                    viewHolder.ibPlano.setEnabled(false);
                }
                viewHolder.tvPlano.setText("Vendas");
            }else if(p.getAgenda() != null){
                if(p.getAgenda() > 0){
                    viewHolder.ibPlano.setImageResource(R.drawable.agenda);
                    viewHolder.ibPlano.setEnabled(true);
                }else{
                    viewHolder.ibPlano.setImageResource(R.drawable.agenda_2);
                    viewHolder.ibPlano.setEnabled(false);
                }
                viewHolder.tvPlano.setText("Agendas");
            }else if(p.getCadastro() != null){
                if(p.getCadastro() > 0){
                    viewHolder.ibPlano.setImageResource(R.drawable.cadastro);
                    viewHolder.ibPlano.setEnabled(true);
                }else{
                    viewHolder.ibPlano.setImageResource(R.drawable.cadastro_2);
                    viewHolder.ibPlano.setEnabled(false);
                }
                viewHolder.tvPlano.setText("Cadastro");
            }else if(p.getLancamento_dispesas() != null){
                if(p.getLancamento_dispesas() > 0){
                    viewHolder.ibPlano.setImageResource(R.drawable.despesas);
                    viewHolder.ibPlano.setEnabled(true);
                }else{
                    viewHolder.ibPlano.setImageResource(R.drawable.despesas_2);
                    viewHolder.ibPlano.setEnabled(false);
                }
                viewHolder.tvPlano.setText("Despesas");
            }else if(p.getEnviar_relatorio_txt() != null){
                if(p.getEnviar_relatorio_txt() > 0){
                    viewHolder.ibPlano.setImageResource(R.drawable.enviar);
                    viewHolder.ibPlano.setEnabled(true);
                }else{
                    viewHolder.ibPlano.setImageResource(R.drawable.enviar_2);
                    viewHolder.ibPlano.setEnabled(false);
                }
                viewHolder.tvPlano.setText("Enviar");
            }else if(p.getMeusDados() != null){
                if(p.getMeusDados() > 0){
                    viewHolder.ibPlano.setImageResource(R.drawable.meus_dados);
                    viewHolder.ibPlano.setEnabled(true);
                }else{
                    viewHolder.ibPlano.setImageResource(R.drawable.meus_dados_2);
                    viewHolder.ibPlano.setEnabled(false);
                }
                viewHolder.tvPlano.setText("Meus Dados");
            }else if(p.getRecebimentos_pendentes() != null){
                if(p.getRecebimentos_pendentes() > 0){
                    viewHolder.ibPlano.setImageResource(R.drawable.recebimentos_pendentes);
                    viewHolder.ibPlano.setEnabled(true);
                }else{
                    viewHolder.ibPlano.setImageResource(R.drawable.recebimentos_pendentes_2);
                    viewHolder.ibPlano.setEnabled(true);
                }
                viewHolder.tvPlano.setText("Recebimentos Pendentes");
            }else if(p.getEntregas_pendentes() != null){
                if(p.getEntregas_pendentes() > 0){
                    viewHolder.ibPlano.setImageResource(R.drawable.entregas_pendentes);
                    viewHolder.ibPlano.setEnabled(true);
                }else{
                    viewHolder.ibPlano.setImageResource(R.drawable.entregas_pendentes_2);
                    viewHolder.ibPlano.setEnabled(true);
                }
                viewHolder.tvPlano.setText("Entregas Pendentes");
            }else if(p.getAlterar_estoque() != null){
                if(p.getAlterar_estoque() > 0){
                    viewHolder.ibPlano.setImageResource(R.drawable.alterar_estoque);
                    viewHolder.ibPlano.setEnabled(true);
                }else{
                    viewHolder.ibPlano.setImageResource(R.drawable.alterar_estoque_2);
                    viewHolder.ibPlano.setEnabled(true);
                }
                viewHolder.tvPlano.setText("Alterar Estoque");
            }
        }//final plano lite


        return convertView;
    }


    /** pattern view holder */
    private static class ViewHolder{
        LinearLayout llPrincipal;
        ImageButton ibPlano;
        TextView tvPlano;
    }


}
4

1 回答 1

1

set onClick for your ImageButton in getView() method like this:

viewHolder.ibPlano.setOnClickListener(new OnClickListener(){

     public void onClick(View v){
         // you can get position of clicked item here(you have it in getView argument)

     }

});
于 2015-03-06T21:48:20.963 回答