2015-09-08 85 views
-1

我有項目label和兩個buttons。我試圖改變按鈕點擊上的標籤。但它正在改變另一個listview項目上的文本。不是帶按鈕的標籤。我使用自定義列表適配器來完成此操作。我試過像下面這樣,更改按鈕上的標籤文本點擊列表視圖項目內

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final MenuItem listItem = objects.get(position); 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) this.context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.menu_list_item, null); 

     btnPlus = (ButtonRectangle) convertView.findViewById(R.id.buttonPlus); 
     btnPlus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int i = 0; 
       cartQtyTextView.setText("" + ++i); 

      } 
     }); 
    } 
} 

我該如何解決這個問題?

+0

你可以替換回收視圖列表視圖? – rKrishna

+0

你創建一個持有人嗎?對於TextView和按鈕? – Nic

+0

@RKNP ListView有什麼問題?不能用ListView完成嗎? –

回答

1

您可能想要創建持有者。 我沒有包含你的菜單項代碼,因爲我沒有看到你使用它。

public class Holder { 
    ButtonRectangle buttonPlus; 
    TextView cartQtyTextView; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // Get Holder 
    final Holder holder = new Holder(); 

    // Change Layout 
    LayoutInflater inflater = (LayoutInflater) this.context 
           .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.menu_list_item, null); 

    // Find Control 
    holder.buttonPlus = (ButtonRectangle)view.findViewById(R.id.buttonPlus); 
    holder.cartQtyTextView = (TextView)view.findViewById(R.id.cartQtyTextView); 

    // Check & Set 
    if (holder.buttonPlus != null) { 
     holder.buttonPlus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int i = 0; 
       if (holder.cartQtyTextView != null) { 
        holder.cartQtyTextView.setText("" + ++i); 
       } 
      } 
     }); 
    } 

    return view; 
} 
+0

謝謝。該工程..這裏發生了什麼?(有支架) – codebot

+0

你可能想讀這爲持有人http://developer.android.com/intl/ja/training/improving-layouts/smooth-scrolling.html#ViewHolder。 – Nic

+0

但是有了這個列表項目正在重複.. – codebot

0

這是因爲您正在將偵聽器設置在if(convertView==null)之內。

所以聽衆只能設置一次一個視圖中創建,但是當你滾動列表視圖中重新使用一個隱藏的項目,但是要確保分配的第一聽衆,因爲convertView不爲空。

您需要在if之外設置您的onClickListener。它是更好,如果你使用holder爲更好的性能

0
public class ExampleAdapter extends ArrayAdapter<MenuItem> { 

private Activity activity; 
private int resource; 
private List<MenuItem> objects; 

public ExampleAdapter(Activity activity, int resource, List<MenuItem> objects) { 
    super(activity, resource, objects); 

    this.activity = activity; 
    this.resource = resource; 
    this.objects= objects; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    MenuItem listItem = objects.get(position); 
    ViewHolder holder = null; 

    if (convertView == null) { 

     holder = new ViewHolder(); 
     LayoutInflater li = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = li.inflate(resource, parent, false); 

     holder.labelTextView= (TextView) convertView.findViewById(R.id.labelTextView); 
     holder.btnPlus= (ButtonRectangle) convertView.findViewById(R.id.buttonPlus); 

     convertView.setTag(holder); 

    } else { 

     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.btnPlus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int i = 0; 
      holder.labelTextView.setText("" + ++i); 

     } 
    }); 

    return convertView; 
} 

static class ViewHolder { 

    TextView labelTextView; 
    ButtonRectangle btnPlus; 

} 

}

+0

這是一個'nicholas'答案的副本..沒有新的學習..謝謝btw – codebot

相關問題