Pergunta

Em geral, a maior parte do tempo eu trabalho com a Intenção de, ao invés de Fragmentar porque eu achei um pouco complexo.Eu tenho uma classe com ListView para mostrar alguns dados a partir de uma matriz e eu quero convertê-lo em Fragmento também quer passar os extras em uma nova fragmentado classe.

Classe ListView:

public class MainActivity extends Activity {
    ListView list;
    String[] web = { "Google", "Twitter", "Windows", "Bing", "Itunes",
            "Wordpress", "Drupal" };
    Integer[] imageId = { R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        CustomList adapter = new CustomList(MainActivity.this, web, imageId);
        list = (ListView) findViewById(R.id.list);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Toast.makeText(MainActivity.this,
                        "You Clicked at " + web[+position], Toast.LENGTH_SHORT)
                        .show();


                Intent i = new Intent(MainActivity.this, intent.class);
                i.putExtra("name", web[+position]);
                startActivity(i);

            }
        });

    }

}

CustomList Classe:

public class CustomList extends ArrayAdapter<String> {

    private final Activity context;
    private final String[] web;
    private final Integer[] imageId;

    public CustomList(Activity context, String[] web, Integer[] imageId) {
        super(context, R.layout.list_single, web);
        this.context = context;
        this.web = web;
        this.imageId = imageId;

    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.list_single, null, true);
        TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);

        ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
        txtTitle.setText(web[position]);

        imageView.setImageResource(imageId[position]);
        return rowView;
    }
}

Eu tenho uma classe principal com três separadores criados usando o fragmento e nesta classe eu gostaria de adicionar o ListView!

public class LayoutOne extends Fragment {


    public static Fragment newInstance(Context context) {
        LayoutOne f = new LayoutOne();  

        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_one, null);
        return root;

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

    }

}

O que eu quero fazer é mostrar o listview no fragmento de classe e quando um item de lista serão clique em quero lançar o Novo Intenção de mostrar qual o Item que foi clicado!

Foi útil?

Solução

Se você deseja passar parâmetros para um Fragmento, uma prática comum é criar um método estático que produz uma instância de seu Fragmento com determinados parâmetros.Você já tem o newInstance o método, agora você só precisa adicionar parâmetros para o retorno e argumentos Fragmento.Você deve verificar os argumentos em seu onCreateView A seguir está um exemplo de como você poderia escrever um.

public class LayoutOne extends Fragment 
{

    public static Fragment newInstance(int someInt, String someString) 
    {
        LayoutOne f = new LayoutOne();

        Bundle args = new Bundle();
        args.putInt("someInt", someInt);
        args.putString("someString", someString);
        f.setArguments(args);

        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_one, null);
        Bundle args = getArguments();

        //From here you would check to see if your arguments are present 
        //proceed accordingly

        return root;

    }
}

Para o seu caso específico, você pode passar ao longo da matriz de Seqüência de caracteres e adicioná-lo como um argumento.

Espero que isso ajude.Boa sorte!

Editar

O problema que você está enfrentando é que você está instanciando um ListView em seu Activity quando, na realidade, você deve estar fazendo isso em seu Fragment.Intenções não são necessários aqui, você só precisa se certificar de que há uma ListView atributo para começar a partir do layout que você anexar à sua Fragment.O seguinte é um pequeno exemplo de como isso deve funcionar.

Note que este método vai na sua LayoutOne classe

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_one, null);

    //Be sure to use the actual id of your list view
    ListView lv = (ListView) root.findViewById(R.id.list_view_id);

    //Make sure that you retrieve the values for 'web' and 'imageId' from 
    //the activity using the "newInstance" method.
    CustomList adapter = new CustomList(getActivity(), web, imageId);
    lv.setAdapter(adapter);

    //From here, set your onClickListener and stuff as you did in your Activity

    return root;

}

Como uma nota, Fragments não tem a findViewById o método.Você tem que chamar o View o que você está inflando para ser seu layout, então neste caso você inflado root e, em seguida, você poderia chamar root.findViewById(R.id.some_id) para obter uma visão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top