3

У меня есть button и textview вместе в listview строка. Я хочу увеличить значение textview, нажав кнопку в той же строке. Ниже мой код, здесь его обновление нескольких строк вместо одной строки, где мне нужно.Увеличение значения текстового поля при нажатии кнопки в списке просмотров

package com.example.digitalmenuactivity; 

public class ListAdapter extends BaseAdapter { 

private Activity activity; 
private Activity activity1; 
private ArrayList<HashMap<String, String>> data; 
private static LayoutInflater inflater=null; 
public ImageLoader imageLoader; 

private int mCounter1=1; 
private int counter=1; 
private int[] counters; 
int pos; 





public ListAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
    activity = a; 
    data=d; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ImageLoader(activity.getApplicationContext()); 
    counters = new int[5]; 
} 


static class ViewHolder { 

    protected TextView mSwitcher1=null; 
    protected Button btnDelete=null; 
    protected TextView title=null; 
    protected TextView artist=null; 
    protected TextView duration=null; 
    protected ImageView thumb_image=null; 

} 



public int getCount() { 
    return data.size(); 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 
@Override 
public int getItemViewType(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 



public View getView(final int position,final View convertView, ViewGroup parent) { 
    View vi=convertView; 
    final ViewHolder viewHolder; 
    pos = getItemViewType(position); 
    if(convertView==null) 
    { 
     vi = inflater.inflate(R.layout.list_row, null); 


     viewHolder = new ViewHolder(); 
     viewHolder.title = (TextView)vi.findViewById(R.id.title); 
     viewHolder.artist = (TextView)vi.findViewById(R.id.description); 
     viewHolder.duration = (TextView)vi.findViewById(R.id.price); 
     viewHolder.thumb_image =(ImageView)vi.findViewById(R.id.list_image); 

    viewHolder.btnDelete = (Button)vi.findViewById(R.id.plus); 
    viewHolder.mSwitcher1 = (TextView) vi.findViewById(R.id.switcher1); 




    vi.setTag(viewHolder); 

    } 
    else { 
     viewHolder = (ViewHolder) vi.getTag(); 
    } 
    viewHolder.btnDelete.setTag(pos); 
    viewHolder.mSwitcher1.setTag(pos); 



    viewHolder.btnDelete.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 


      pos = (Integer) view.getTag(); 


      int temp=counters[pos]; 
      temp++; 
      counters[pos]= temp; 

      viewHolder.mSwitcher1.setText(String.valueOf(counters[pos])); 
      notifyDataSetChanged(); 

      Log.d("^^^^^^", "button clicked" + counters.length); 
      Log.d("^^^^^^", "temp" + temp); 

     } 

     }); 
    HashMap<String, String> song = new HashMap<String, String>(); 
    song = data.get(position); 

    viewHolder.title.setText(song.get(FoodActivity.KEY_TITLE)); 
    viewHolder.artist.setText(song.get(FoodActivity.KEY_ARTIST)); 
    viewHolder.duration.setText(song.get(FoodActivity.KEY_DURATION)); 
    imageLoader.DisplayImage(song.get(FoodActivity.KEY_THUMB_URL),viewHolder.thumb_image); 
    return vi; 
} 

}

+0

Hey guyzz. , вопрос был решен. .Спасибо за поддержку. Проблема была в этой строке: notifyDataSetChanged(). Я прокомментировал эту линию и ее работу сейчас. :-) – Vipin

ответ

1

Вы делаете короткие ошибки: перечисленные ниже:

Первый

Использована

viewHolder.mSwitcher1.setTag (положение);

Вместо того, чтобы:

viewHolder.mSwitcher1.setTag (Integer.valueOf (положение));

Второй

Нет необходимости, чтобы получить вид тег дважды, один раз достаточно, чтобы получить точное выбранное положение, адаптер код будет выглядеть следующим образом:

ListviewAdapter:

import java.util.ArrayList; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.TextView; 

public class ListviewAdapter extends BaseAdapter { 
    ArrayList<String> getData = new ArrayList<String>(); 
    Context c; 
    private LayoutInflater mInflater; 
    int pos; 
    int boxState[]; 
    SharedPreferences prefs; 

    private int mCounter1 = 1; 
    private int counter = 1; 
    private int[] counters; 

    public ListviewAdapter(Context cont, ArrayList<String> data) { 
     // TODO Auto-generated constructor stub 
     c = cont; 
     getData = data; 
     mInflater = LayoutInflater.from(cont); 

     counters = new int[5]; 

    } 

    public int getCount() { 
     // TODO Auto-generated method stub 
     return getData.size(); 
    } 

    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public class ViewHolder { 
     private TextView name = null; 
     private Button button = null; 

    } 

    @Override 
    public int getItemViewType(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public int getViewTypeCount() { 
     // TODO Auto-generated method stub 
     return getData.size(); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     final ViewHolder holder; 
     View vi = convertView; 
     pos = getItemViewType(position); 

     if (convertView == null) { 

      vi = mInflater.inflate(R.layout.row, null); 

      holder = new ViewHolder(); 

      holder.name = (TextView) vi.findViewById(R.id.textView); 
      holder.button = (Button) vi.findViewById(R.id.checkBox); 

      vi.setTag(holder); 
     } 

     else { 
      holder = (ViewHolder) vi.getTag(); 
     } 

     holder.button.setTag(pos); 
     holder.name.setTag(pos); 

     holder.button.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       pos = (Integer) v.getTag(); 

       int temp = counters[pos]; 
       temp++; 
       counters[pos] = temp; 

       notifyDataSetChanged(); 
       holder.name.setText(String.valueOf(counters[pos])); 

       Log.d("^^^^^^", "button clicked" + counters.length); 
       Log.d("^^^^^^", "temp" + temp); 

      } 
     }); 

     return vi; 
    } 

} 
+0

Я попробовал. . По-прежнему имеет ту же проблему – Vipin

+0

Невозможно, его работа для меня, вы получаете какую-либо ошибку? – RobinHood

+0

Я не получаю никаких ошибок, но обновленные значения текстового представления, отражающиеся на нескольких строках – Vipin

1

И вы неправильно используете шаблон ViewHolder. Прочтите следующее:

http://www.jmanzano.es/blog/?p=166

+0

следил за ссылкой и модифицировал код, все тот же. .формированный код обновляется по моему вопросу – Vipin

+0

Да, это не решение вашей проблемы. Я думаю, что у вас должен быть дополнительный массив с размером, равным количеству ваших текстовых просмотров, где вы хотите увеличить значения. В этом массиве вы должны сохранить значения, которые будут отображаться в текстовом виде. И когда вы хотите увеличить значение в одном из текстовых просмотров, вы увеличиваете элемент массива. –

+0

Эй, проблема решена. .Спасибо за поддержку. Проблема была в этой строке: notifyDataSetChanged().Я прокомментировал эту линию и ее работу сейчас. :-) – Vipin

Смежные вопросы