5

Ich habe eine Listenansicht, die ich die Zeilen über MySQL-Datenbank füllen.get imageview position innerhalb von listview

Dies ist eine Ansicht von dem, was ich getan habe:

enter image description here

Diese Namen, die Sie sah aus meiner Datenbank kommen, und die PLAY Image aus meiner Layoutliste ist, die in jeder Zeile erscheint (wenn ich eine Zeile in meine Datenbank hinzufüge).

Nun mein Problem ist, wenn ich einen Klick Zuhörer auf diese Play-Taste eingestellt, ändert sich weitere Play-Tasten aus einer anderen Reihen auch, aber nicht alle von ihnen (Zweck es in den Pause-Image usw. wechselt). Daher denke ich, ich bekomme die Position nicht, oder? Kannst du mir bitte dabei helfen?

Das ist mein Fragment:

public class XXXUpdatesFragment extends Fragment implements AsyncResponse 
,AdapterView.OnItemClickListener{ 

    View view ; 
    private ArrayList<Product> productList; 
    private ListView lvProduct; 
    private FunDapter<Product> adapter; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.xxx_updates_layout, container, false); 
     ImageLoader.getInstance().init(UILConfig.config(getActivity())); 

     lvProduct = (ListView)view.findViewById(R.id.lvProduct); 

     PostResponseAsyncTask taskRead = new PostResponseAsyncTask(getActivity(), this); 

     taskRead.execute("http://symphonyrecords.6te.net/product.php"); 

     return view; 

    } //onCreate 


    @Override 
    public void processFinish(String s) { 
     productList = new JsonConverter<Product>().toArrayList(s, Product.class); 

     BindDictionary<Product> dict = new BindDictionary<Product>(); 
     dict.addStringField(R.id.tvName, new StringExtractor<Product>() { 
      @Override 
      public String getStringValue(Product product, int position) { 
       return product.name; 
      } 
     }); 

     dict.addStringField(R.id.tvDescription, new StringExtractor<Product>() { 
      @Override 
      public String getStringValue(Product product, int position) { 
       return product.description; 
      } 
     }); 

     dict.addStringField(R.id.tvQty, new StringExtractor<Product>() { 
      @Override 
      public String getStringValue(Product product, int position) { 
       return "" + product.qty; 
      } 
     }); 


     adapter = new FunDapter<>(getActivity(), productList, R.layout.d_layout_list_d, dict); 


     lvProduct.setAdapter(adapter); 
     lvProduct.setOnItemClickListener(this); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Product selectedProduct = productList.get(position); 
     Toast.makeText(getActivity(),selectedProduct.name+"", Toast.LENGTH_SHORT).show(); 
     } 


    } 

Das ist meine Produktklasse:

public class Product implements Serializable { 
@SerializedName("pid") 
public int pid; 

@SerializedName("name") 
public String name; 

@SerializedName("qty") 
public int qty; 

@SerializedName("price") 
public String description; 
} 

Und das ist mein Adapter:

public class FunDapter<T> extends BaseAdapter implements Filterable { 


private boolean paused = true; 

protected List<T> mDataItems; 
protected List<T> mOrigDataItems; 
protected LongExtractor<T> idExtractor; 
protected final Context mContext; 
private final int mLayoutResource; 
private final BindDictionary<T> mBindDictionary; 
private int oddColorRes; 
private int evenColorRes; 
private FunDapterFilter<T> funDapterFilter; 
private Filter mFilter; 


public FunDapter(Context context, List<T> dataItems, int layoutResource, 
       BindDictionary<T> dictionary) { 
    this(context, dataItems, layoutResource, null, dictionary); 
} 

public FunDapter(Context context, List<T> dataItems, int layoutResource, 
       LongExtractor<T> idExtractor, BindDictionary<T> dictionary) { 
    this.mContext = context; 
    this.mDataItems = dataItems; 
    this.mOrigDataItems = dataItems; 
    this.mLayoutResource = layoutResource; 
    this.idExtractor = idExtractor; 
    this.mBindDictionary = dictionary; 

} 

public void updateData(List<T> dataItems) { 
    this.mDataItems = dataItems; 
    this.mOrigDataItems = dataItems; 
    notifyDataSetChanged(); 
} 

@Override 
public int getCount() { 
    if (mDataItems == null || mBindDictionary == null) return 0; 

    return mDataItems.size(); 
} 

@Override 
public T getItem(int position) { 
    return mDataItems.get(position); 
} 

@Override 
public boolean hasStableIds() { 
    if(idExtractor == null) return super.hasStableIds(); 
    else return true; 
} 

@Override 
public long getItemId(int position) { 
    if(idExtractor == null) return position; 
    else return idExtractor.getLongValue(getItem(position), position); 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    final GenericViewHolder holder; 
    if (null == v) { 
     LayoutInflater vi = 
       (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(mLayoutResource, null); 
     holder = new GenericViewHolder(); 
     holder.root = v; 


     holder.playPause=(ImageView)v.findViewById(R.id.playPause); 
     holder.playPause.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

         if (paused) { 
          holder.playPause.setImageResource(R.drawable.ic_pause); 
          paused=false; 
         } 
         else { 
          paused = true; 
          holder.playPause.setImageResource(R.drawable.ic_play); 
         } 

      }}); 



     FunDapterUtils.initViews(v, holder, mBindDictionary); 

     v.setTag(holder); 


    } else { 
     holder = (GenericViewHolder) v.getTag(); 
    } 

    final T item = getItem(position); 
    showData(item, holder, position); 

    return v; 
} 


private void showData(T item, GenericViewHolder holder, int position) { 

    if (oddColorRes > 0 && evenColorRes > 0) { 
     if (position % 2 == 0) { 
      holder.root.setBackgroundColor(mContext.getResources().getColor(evenColorRes)); 
     } else { 
      holder.root.setBackgroundColor(mContext.getResources().getColor(oddColorRes)); 
     } 
    } 

    FunDapterUtils.showData(item, holder, position, mBindDictionary); 
} 

public FunDapter<T> setAlternatingBackground(int oddColorRes, int evenColorRes) { 

    if (oddColorRes <= 0 || evenColorRes <= 0) { 
     throw new IllegalArgumentException("Color parameters are illegal"); 
    } 

    this.oddColorRes = oddColorRes; 
    this.evenColorRes = evenColorRes; 

    return this; 
} 

public void setIdExtractor(LongExtractor<T> idExtractor) { 
    this.idExtractor = idExtractor; 
} 

@Override 
public Filter getFilter() { 
    return mFilter; 
} 

public void initFilter(FunDapterFilter<T> filter) { 

    if (filter == null) 
     throw new IllegalArgumentException("Cannot pass a null filter to FunDapter"); 

    this.funDapterFilter = filter; 

    mFilter = new Filter() { 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 

      List<T> list = (List<T>) results.values; 

      if (results.count == 0) { 
       resetData(); 
      } else { 
       mDataItems = list; 
      } 

      notifyDataSetChanged(); 
     } 

     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 

      FilterResults results = new FilterResults(); 
      if (constraint == null || constraint.length() == 0) { 

       results.values = mOrigDataItems; 
       results.count = mOrigDataItems.size(); 
      } else { 

       List<T> filter = 
         funDapterFilter.filter(constraint.toString(), mOrigDataItems); 

       results.count = filter.size(); 
       results.values = filter; 

      } 

      return results; 
      } 
     }; 
    } 

    public void resetData() { 
     mDataItems = mOrigDataItems; 
    } 

    } 

Es ist eine Woche her, dass ich damit zu kämpfen habe, ich wäre so dankbar, wenn Sie mir dabei helfen würden.

Antwort

0

Fügen Sie einen Paramter in Modellklasse und zunächst als Null

In FunDapter Klasse gesetzt:

holder.playPause=(ImageView)v.findViewById(R.id.playPause); 

    if(mDataItems.get(position).getplayPauseFlag()==1) 
    { 
     holder.playPause.setImageResource(R.drawable.ic_pause); 
    } 
    else 
    { 
     holder.playPause.setImageResource(R.drawable.ic_play); 
    } 


    holder.playPause.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

       if (mDataItems.get(position).getplayPauseFlag()==0) 
       { 
        mDataItems.get(position).setplayPauseFlag(1); 
       } 
       else { 
        mDataItems.get(position).setplayPauseFlag(0); 
       } 
       notifyDataSetChanged(); 
    }}); 
Verwandte Themen