这是一个常见问题,但已解决的问题并不适用于我的代码,因此我认为我会粘贴自己的代码,因为我注意到有一百万种方法可以通过Android开发实现相同的结果有点难,但无论如何...
每当我过滤我的列表视图时,在过滤器之后不会保持列表视图项的位置,过滤的项目被分配一个从0开始的新位置,因此用新的文件项替换位置0上的原始列表视图项。那个位置。
例如:listview = aONE [0], aTWO [1], aTHERE[2], bONE [3], b TWO[4], bTHREE [5].
如果我输入“b”,则新列表为
bONE [0], bTWO [1], bTHREE [2] and NOT bONE [3], bTWO [4], bTHREE [5],
下面是我的代码:
public class ListViewAdapterProduct extends BaseAdapter {
// Declare Variables
Context mContext;
LayoutInflater inflater;
private List<ClassProductList> classProductlist = null;
private ArrayList<ClassProductList> arraylist;
public ListViewAdapterProduct(Context context, List<ClassProductList> classProductlist) {
mContext = context;
this.classProductlist = classProductlist;
inflater = LayoutInflater.from(mContext);
this.arraylist = new ArrayList<ClassProductList>();
this.arraylist.addAll(classProductlist);
}
public class ViewHolder {
TextView title;
TextView description;
ImageView photo;
}
@Override
public int getCount() {
return classProductlist.size();
}
@Override
public ClassProductList getItem(int position) {
return classProductlist.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = inflater.inflate(R.layout.list_view_single_row, null);
holder.title = (TextView) view.findViewById(R.id.textLarge);
holder.description = (TextView) view.findViewById(R.id.textSmall);
holder.photo= (ImageView) view.findViewById(R.id.imageThumb);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.title.setText(classProductlist.get(position).getTitle());
holder.description.setText(classProductlist.get(position).getDescription());
holder.photo.setImageResource(classProductlist.get(position).getImage());
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(position == 0) {
Intent intent0 = new Intent(mContext, ProductMyactivity1.class);
mContext.startActivity(intent0);
}
if(position == 1) {
Intent intent1 = new Intent(mContext, ProductMyactivity2.class);
mContext.startActivity(intent1);
}
}
});
return view;
}
// Filter Class
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
classProductlist.clear();
if (charText.length() == 0) {
classProductlist.addAll(arraylist);
}
else
{
for (ClassProductList Product : arraylist)
{
if (Product.getTitle().toLowerCase(Locale.getDefault()).contains(charText))
{
classProductlist.add(Product);
}
}
}
notifyDataSetChanged();
}
}
由于
答案 0 :(得分:1)
以下代码解决了我的ListViewAdapter
中的问题// Listen for ListView Item Click
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// Send single item click data to SingleItemView Class
String mytitle=holder.listContent.getText().toString();
if(mytitle.equals("murakoze")) {
// Play song
mp.reset();// stops any current playing song
mp = MediaPlayer.create(mContext, R.raw.murakoze);// create's
// new
// mediaplayer
// with
// song.
mp.start(); // starting mediaplayer
}
}
});
return view;
}
答案 1 :(得分:0)
最简单的方法是使用另一个itemId
,但在
@Override
public long getItemId(int position) {
return position;
}
通过过滤原始项目,移动到&#34; originalValues列表&#34;,将创建一个新列表,并将刚过滤的项目放入其中并显示。所有对getItem(int pos)
和其他许多人的进一步调用随后都会使用已过滤的列表。这个位置会改变。您可以实现自己的ListView,也可以只使用其他ID。
要在getItemId(int pos)
调用ClassProductList getItem(int position)
中执行此操作以获取您的对象。从ClassProductList
检索您的标识符并使用该标识符。
答案 2 :(得分:0)
已解决!!!!!
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String mytitle=holder.title.getText().toString();
if(mytitle.equals("ProductOne")){
Intent intent1 = new Intent(mContext, ProductClass.ProductOne);
mContext.startActivity(intent1);
...
}
}
不得不补充:
String mytitle=holder.title.getText().toString();
并使用字符串和NOT位置,因此无论是否应用了天气过滤器,都会始终使用列表视图项字符串,无论过滤后它采用哪个新位置。
答案 3 :(得分:0)
由于已经将适配器设置为列表视图,因此存在获取项目当前位置的问题,因此必须首先清除其内容然后再调用它们
lv.setAdapter( null );
myData( );//contains your data
ca.notifyDataSetChanged();//notifying the change
我认为这会为您提供帮助