5

私はmysqlデータベースを介して行を埋めるリストビューを持っています。リストビュー内の画像ビュー位置を取得

これは私がやっていることを示す図である。

enter image description here

をあなたが見たこの名前は、私のデータベースから来ているとPLAY ImageViewの各行に表示されて、私のレイアウトリスト(からです私のデータベースに行を追加するとき)。私は(目的は、休止ImageViewのとなどにそれを切り替えている)それはあまりにも他の行から別のプレイボタンを変更し、すべてではない彼らの、その再生ボタンをクリックしてリスナーを設定するとき

は今私の問題があります。だから、私はポジションを取っていないと思いますよね?あなたはこれで私を助けてください!

これは私のフラグメントである:

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; 
} 

そして、これは私のアダプタです:

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(); 
     } 


    } 

これは私のProductクラスである

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; 
    } 

    } 

私はこれで苦労している一週間を過ごしました。あなたがこれを手伝ってくれたらとても感謝しています。

答えて

0

モデルクラスに1 PARAMTERを追加し、最初にFunDapterクラスではゼロ

のように設定:

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(); 
    }}); 
関連する問題