3

我一直在做的是关于customadapter。现在我想从我的列表视图中获取选定的项目,但它的适配器是自定义的。在我的列表视图中,我有一个图像、标题和一个标题,我想获取所选项目,在我的例子中只是标题。我怎么做?

这是我到目前为止所尝试的:

    @Override
public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {
    String strHouseName = "house_name";
    String strHousePrice = "house_price";
    //String selectedFromList =(String) (lv.getItemAtPosition(pos));
    Intent i;

    switch(pos){
    case 0:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "5 Dina Retreat, Carrum Downs");
        i.putExtra(strHousePrice, "$300,000.00");
        startActivity(i);
        break;
    case 1:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 941 Cob Terrace, Clyde North");
        i.putExtra(strHousePrice, "$800,000.00");
        startActivity(i);
        break;
    case 2:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 932 Ventasso Street, Clyde");
        i.putExtra(strHousePrice, "$1,000,000.00");
        startActivity(i);
        break;
    case 3:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 515 Summerhill Blvd, Drouin");
        i.putExtra(strHousePrice, "$300,000.00");
        startActivity(i);
        break;
    case 4:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 17 Todman Street, Drouin (Option 2)"); 
        i.putExtra(strHousePrice, "$550,000.00");
        startActivity(i);
        break;
    case 5:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 32 Aqueduct Road, Langwarrin");
        i.putExtra(strHousePrice, "$600,000.00");
        startActivity(i);
        break;
    case 6:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Units 2-7, 269 North Road, Langwarin");
        i.putExtra(strHousePrice, "$450,000.00");
        startActivity(i);
        break;
    case 7:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "U 39, 40-60 Potts Road, Langwarrin");
        i.putExtra(strHousePrice, "$1,300,000.00");
        startActivity(i);
        break;
    case 8:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 1 McClenaghan Place, Pakenham");
        i.putExtra(strHousePrice, "$2,000,000.00");
        startActivity(i);
        break;
    case 9:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 2 McClenaghan Place, Pakenham");
        i.putExtra(strHousePrice, "$300,000.00");
        startActivity(i);
        break;
    case 10:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 3 McClenaghan Place, Pakenham");
        i.putExtra(strHousePrice, "$900,000.00");
        startActivity(i);
        break;
    case 11:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 4 McClenaghan Place, Pakenham");
        i.putExtra(strHousePrice, "$600,000.00");
        startActivity(i);
        break;
    case 12:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 5 McClenaghan Place, Pakenham");
        i.putExtra(strHousePrice, "$1,200,000.00");
        startActivity(i);
        break;
    case 13:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 7 McClenaghan Place, Pakenham");
        i.putExtra(strHousePrice, "$700,000.00");
        startActivity(i);
        break;
    case 14:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 11 McClenaghan Place, Pakenham");
        i.putExtra(strHousePrice, "$500,000.00");
        startActivity(i);
        break;
    case 15:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 12 McClenaghan Place, Pakenham");
        i.putExtra(strHousePrice, "$3,000,000.00");
        startActivity(i);
        break;
    case 16:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 532 Summerhill Blvd, Drouin");
        i.putExtra(strHousePrice, "$300,000.00");
        startActivity(i);
        break;
    case 17:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 17 Ajax Street, Drouin");
        i.putExtra(strHousePrice, "$300,000.00");
        startActivity(i);
        break;
    case 18:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 133 Mountainview Blvd, Cranbourne North");
        i.putExtra(strHousePrice, "$300,000.00");
        startActivity(i);
        break;
    case 19:
        i = new Intent(this, ViewHouse.class);
        i.putExtra(strHouseName, "Lot 531 Summerhill Blvd, Drouin");
        i.putExtra(strHousePrice, "$300,000.00");
        startActivity(i);
        break;
    default: Log.d(strHouseName, "No such house name available");
    } 

}


    class MyCustomAdapter extends BaseAdapter
{
    String[] data_text1;
    String[] data_text2;
    int[] data_image;

MyCustomAdapter() {
    data_text1 = null;
    data_text2 = null;
    data_image = null;
}

MyCustomAdapter(int[] image, String[] house, String[] price) {
    data_text1 = house;
    data_text2 = price;
    data_image = image;
}

public int getCount() {
    return data_text1.length;
}

public String getItem(int position) {
    return null;
}

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

public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = getLayoutInflater();
    View row;

    row = inflater.inflate(R.layout.listrow, null);

    TextView textview1 = (TextView) row.findViewById(R.id.text1);
    TextView textview2 = (TextView) row.findViewById(R.id.text2);
    ImageView imageview = (ImageView) row.findViewById(R.id.image);

    imageview.setScaleType(ImageView.ScaleType.FIT_XY);
    textview1.setText(data_text1[position]);
    textview2.setText("$" + (new DecimalFormat("#,###.00")).format(Double.parseDouble(data_text2[position])) );
    imageview.setImageResource(data_image[position]);

    return (row);

    }
}

同时,我只是通过它的位置,但问题是,如果列表是排序的呢?怎样才能得到正确的选中项?有任何想法吗?我很乐意欣赏它。谢谢。

4

6 回答 6

6

试试这个..

@Override
public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {

    TextView textview1 = (TextView) v.findViewById(R.id.text1);
    TextView textview2 = (TextView) v.findViewById(R.id.text2);

    Log.v("textview1",textview1.getText().toString().trim());
    Log.v("textview2",textview2.getText().toString().trim());

}
于 2013-10-30T11:40:22.323 回答
1

在项目上单击获取当前视图,获取它的 UI 元素 ex TextView 标题,并将它们发送到意图

@Override
public void onItemClick(AdapterView<?> parent, View v, int pos, long id)
{
    if (v== null)
        v= inflater.inflate(R.layout.list_row_layout, null); // reached in case of listview bug in android which is a little chance but to make sure not to crash on NPE    
    String title = ((TextView) v.findViewById(R.id.list_row_title)).getText();
    String price = ((TextView) v.findViewById(R.id.list_row_price)).getText();

    i = new Intent(this, ViewHouse.class);
    i.putExtra(strHouseName, title );
    i.putExtra(strHousePrice, price );
    startActivity(i);
}
于 2013-10-30T11:41:19.280 回答
1

当然可以举个例子

//数据集类

public class HouseData{

    //private String HouseName= "";
    private String HousePrice = "";

    /*public String getHouseName() {
        return HouseName;
    }
    public void setHouseName(String HouseName) {
        this.HouseName= HouseName;
    }*/
    public String getHousePrice () {
        return HousePrice ;
    }
    public void setHousePrice (String HousePrice ) {
        this.HousePrice = HousePrice ;
    }

//viewholder类是:-

 public class ViewHolder
        {
            public TextView tv_HousePrice,tv_HouseName

        }

//这里是getview方法。

public View getView(final int position, View convertView,
                ViewGroup parent) {

            final ViewHolder holder;
            //holder=new ViewHolder();

            View listrow = convertView;

            activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

            if (listrow == null) {

                LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                listrow = vi.inflate(R.layout.your_listview_item_layout, null);

                holder=new ViewHolder();
                holder.tv_HouseName=(TextView)listrow.findViewById(R.id.tv_name);


                holder.tv_HousePrice=(EditText)listrow.findViewById(R.id.tv_price);
                listrow.setTag(holder);

            }
            else
                holder=(ViewHolder)listrow.getTag();
            listrow.setBackgroundColor(((position % 2)!=0) ? Color.rgb(229,229,229) : Color.WHITE);

            try {
                houseData= getItem(position);



                if (houseData!= null) { 

                    holder.tv_HouseName.setText(""+houseData.getHouseName());
                    holder.tv_HousePrice.setText(""+houseData.getHousePrice());

                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }

            listrow.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
//here you can pass complete data object to next activity
}
            });


            return listrow;
        }
于 2013-10-30T11:43:26.900 回答
0

尝试获取视图。通过 id 将其解析到您的 textview。获取文本并继续

于 2013-10-30T11:35:06.187 回答
0

试试这个..

public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {
    // Type cast to what the layout you used in the xml i.e, for the list item
    // For example i took the RelativeLayout
    if(v instanceOf RelativeLayout){
        RelativeLayout layout = (RelativeLayout) v;
        TextView title = (TextView) layout.findViewById(R.id.conFormat_Name);
        System.out.println(title.getText());
    } 

}
于 2013-10-30T11:38:09.523 回答
0

您可以创建一个成员以在您的自定义适配器中保存选定的索引,例如...

private int selectedIndex;

然后将其初始化selectedIndex = -1为自定义适配器及其getter和setter的构造函数......

public void setSelectedIndex(int index) {
    this.selectedIndex = index;
}

public int getSelectedIndex() {
    return selectedIndex;
}

最后,您只需在 setter 中传递position适配器的参数,onItemClick并使用 getter 在任何您想要的地方获取所选项目。

一旦你维护了 selectedIndex,你就可以很容易地得到选中的项目,比如..

public BookInfo getSelectedItem() {
    if (selectedIndex <= -1 || selectedIndex >= items.size()) {
        return null;
    } else {
        return items.get(selectedIndex);
    }
}

希望这可以帮助...:)

于 2013-10-30T11:39:15.903 回答