0

私のGetView()私のBaseAdapterクラスのメソッド...私はビューホルダーを持っています。 holder.feedUpVotebuttonをクリックしたときfeed.numOFLikes Textviewが増加します。問題は、下にスクロールして元に戻ったときの値です。私はnotifydatasetChanged();に電話するのを拒否します。何も追加していないか、リストから何も削除していないからです。アンドロイドでBaseAdapterでビューのテキストを設定するには?

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

     likes = new int[GlobalFeedTab.arrayFeedList.size()]; 
     ViewHolder holder; 

    if (view == null) { 

     position = i; 
     view = inflater.inflate(R.layout.feed_list_row, viewGroup, false);   

     holder = new ViewHolder(); 
     holder.feedNumOfLikes = (TextView) view.findViewById(R.id.feedNumofLikes); 
        holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton); 
     view.setTag(holder); 

     } 
    else if(view != null){ 

     position = i; 
     holder = (ViewHolder) view.getTag(); 

    } 

     HashMap<String, String> mFeed = new HashMap<>(); //Hashmap of data that I get from the MainActivity 
     mFeed = GlobalFeedTab.arrayFeedList.get(position); 

     holder.feedNumOfLikes.setText(mFeed.get("likes")); 
     holder.feedUpVoteButton.setTag(position); 

      holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 

          int pos = (Integer) v.getTag(); 
          ParseObject parseObFeed = objects.get(pos);     

           likes[pos] += 1; 
           parseObFeed.put("likes", likes[pos]); 
           holder.feedNumOfLikes.setText(String.valueOf(parseObFeed.getInt("likes") 
           )); //This is where I set the Text 

           parseObFeed.saveInBackground(); 

      } 
     }); 
    } 


class ViewHolder { 

    TextView feedNumOfLikes; 
    Button feedUpVoteButton;  

} 
+0

ArrayAdapterまたはRecyclerView.Adapterを使用しないのはなぜですか? –

+0

'GlobalFeedTab.arrayFeedList'は私のArrayAdapterです。 @ cricket_007 – grant

+0

私はそうは思わない。これは 'ArrayList'です –

答えて

0

アダプタは、すべてのビューをリサイクルする、それがあなたのケースをビュー(実際に、それは画面サイズによって異なります)通常、あなたのアダプタはわずか7〜8を作成していることを意味し、異なるposition.Inでこれらのビューを再利用しますちょうどそうするためには、オブジェクトの配列を作成することができます(あなたの場合、画面上のすべての位置の好きな数を追跡するための整数の配列だけです)。

これはあなたのアダプタに基づく鉱山のアイデアの簡単な実例である:私は多分あなたはあなたのコード内でこのアイデアを実装しようとしている、知らないが、私はそこにそれを見ることができない

private class YourAdapter extends BaseAdapter { 

    private int[] numberOfLikes=new int[getCount()]; 

    @Override 
    public View getView(final int index, View view, ViewGroup viewGroup) { 

     likes = new int[GlobalFeedTab.arrayFeedList.size()]; 
     ViewHolder holder; 

     if (view == null) { 

      position = i; 
      view = inflater.inflate(R.layout.feed_list_row, viewGroup, false); 

      holder = new ViewHolder(); 
      holder.feedNumOfLikes = (TextView) view.findViewById(R.id.feedNumofLikes); 
      holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton); 

      holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 


        ParseObject parseObFeed = objects.get(pos); 
        likes[pos] += 1; 
        parseObFeed.put("likes", likes[pos]); 
        holder.feedNumOfLikes.setText(String.valueOf(parseObFeed.getInt("likes"))); //This is where I set the Text 

        parseObFeed.saveInBackground(); 


       } 
      }); 
      view.setTag(holder); 

     } 
     else if(view != null){ 

      position = i; 
      holder = (ViewHolder) view.getTag(); 

     } 

     HashMap<String, String> mFeed = new HashMap<>(); //Hashmap of data that I get from the MainActivity 
     mFeed = GlobalFeedTab.arrayFeedList.get(position); 

     holder.feedNumOfLikes.setText("Number of likes:"+Integer.toString(numberOfLikes[index])); //Just assign the value for 

     // holder.feedNumOfLikes.setText(mFeed.get("likes")); 
     // holder.feedUpVoteButton.setTag(position); // I don't know why are you doing this 

    } 



} 






class ViewHolder { 

    TextView feedNumOfLikes; 
    Button feedUpVoteButton; 

} 

。はいの場合は、より多くのコードを提供する必要があります。

さらに便利なRecyclerView.Adapterを試してみることもできます。ただし、ListViewまたはGridViewからRecyclerViewに変更する必要があります。これはカスタマイズ可能で、上記より少し速いです。

関連する問題