我一直在做的是关于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);
}
}
同时,我只是通过它的位置,但问题是,如果列表被排序怎么办?如何获得正确的选定项目?有任何想法吗?我很乐意欣赏它。感谢。
答案 0 :(得分: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());
}
答案 1 :(得分:1)
在项目上单击获取当前视图,从文本视图标题获取它的ui元素,并将它们发送到intent
@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);
}
答案 2 :(得分:1)
确实是一个例子
// DatasetClass
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;
}
答案 3 :(得分:0)
尝试获取视图。 通过id将其解析为textview。获取文本并继续
答案 4 :(得分: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());
}
}
答案 5 :(得分:0)
您可以创建一个成员来保留自定义适配器中的选定索引,例如......
private int selectedIndex;
然后在自定义适配器及其getter和setter的构造函数中将其初始化为selectedIndex = -1
...
public void setSelectedIndex(int index) {
this.selectedIndex = index;
}
public int getSelectedIndex() {
return selectedIndex;
}
最后,您只需要在设置器中传递适配器position
的{{1}}参数,然后使用getter获取所需的任何项目。
一旦你维护了selectedIndex,就可以轻松获得像..
这样的选定项目onItemClick
希望这有助于......:)