如何在android中的自定义ListView中传递不同的intent Extras?

时间:2014-05-31 11:50:38

标签: android listview android-intent

这里我有一个rootCategoryID的String数组和一个String categoryID。

在我的自定义ListView上,我想为每一行传递不同的ID。

但我不能让它发挥作用!这是我的代码:

package ir.zabardast.onlinemarket;

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class Main extends ListActivity {

String[] rootCategoryName = new String[6];
String[] rootCategoryImage = new String[6];
String[] rootCategoryID = new String[6];
int categoryCount;
String categoryID = "0";

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

        HandleXML hxml = new HandleXML();

        String url = "http://karakaal.com/market/category.xml";
        String object = "category";
        hxml.fetchXML(url, object);
        while(hxml.parsingComplete);

        categoryCount = hxml.getCategories().size();

        for (int i = 0; i < categoryCount; i++) {
            if(hxml.getCategories().get(i).getParentId() == 0){
                rootCategoryName[i] = hxml.getCategories().get(i).getName();
            }
        }

        for (int i = 0; i < categoryCount; i++) {
            if(hxml.getCategories().get(i).getParentId() == 0){
                rootCategoryImage[i] = hxml.getCategories().get(i).getImage();
            }
        }

        for (int i = 0; i < categoryCount; i++) {
            if(hxml.getCategories().get(i).getParentId() == 0){
                rootCategoryImage[i] = hxml.getCategories().get(i).getId();
            }
        }

        setListAdapter(new MyAdapter(this,
                android.R.layout.simple_list_item_1,
                R.id.listName,
                rootCategoryName));

        ListView listView = getListView();
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> av, View view, int i, long l) {
                Intent intent = new Intent(Main.this, CategoryList.class);
                intent.putExtra("categoryID", categoryID);
                startActivity(intent);
            }
        });
    } else if (!checkWifi()) {
        setContentView(R.layout.wifi_check);
    }

}

private class MyAdapter extends ArrayAdapter<String>{

    public MyAdapter(Context context, int resource, int textViewResourceId,
            String[] rootCategoryName) {
        super(context, resource, textViewResourceId, rootCategoryName);
        // TODO Auto-generated constructor stub
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.list, parent, false);
        String[] products = rootCategoryName;

        ImageView iv = (ImageView) row.findViewById(R.id.listImage);
        TextView tv = (TextView) row.findViewById(R.id.listName);

        tv.setText(products[position]);

        int loader = R.drawable.ic_launcher;
        ImageLoader imgLoader = new ImageLoader(getApplicationContext());
        String baseURL = "http://karakaal.com/market/";
        imgLoader.DisplayImage(baseURL + rootCategoryImage[position], loader, iv);

        categoryID = rootCategoryID[position];

        return row;
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public boolean checkWifi()
{
    ConnectivityManager conman = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean wifi = conman.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
    if (wifi)
        return true;
    else
        return false;  
}


}

正如您所看到的,我使用变量在我的私有类中设置categoryID

我想在点击每一行时将Intent的每行的rootCategoryID传递给下一个活动

1 个答案:

答案 0 :(得分:2)

您可以按ListView点击的位置获取categoryID

   listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                public void onItemClick(AdapterView<?> av, View view, int i, long l) {
                    Intent intent = new Intent(Main.this, CategoryList.class);
                    intent.putExtra("categoryID", rootCategoryID[i]);//here CategoryId
                    startActivity(intent);
                }
            });