2016-05-17 5 views
0

アダプタからTextView値を取得して変更します。GridViewアダプタ内の親アクティビティにアクセスしてTextView値を取得し、値を変更します

ボタンがアダプタ内にあり、そのボタンを押すと、アダプタ内からTextView値を変更したいと考えています。それは可能ですか?ここで

は私のアダプタです:

public class CustomGridView3 extends BaseAdapter { 
    private ArrayList<ListItem> listData = new ArrayList<ListItem>(); 
    private LayoutInflater layoutInflater; 
    private Context context; 
    private int count = 0; 
    CustomGridView3 adapter = this; 
    int hargax,qtyx,totalx; 
    public CustomGridView3(Context context, ArrayList<ListItem> listData) { 
     this.listData = listData; 
     layoutInflater = LayoutInflater.from(context); 
     this.context = context; 
    } 

    @Override 
    public int getCount() { 
     return listData.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return listData.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 
     if (convertView == null) { 
      convertView = layoutInflater.inflate(R.layout.afterlogin_product_gridview, null); 
      holder = new ViewHolder(); 
      holder.headlineView = (TextView) convertView.findViewById(R.id.nama_produk); 
      holder.teaserView = (TextView) convertView.findViewById(R.id.harga); 
      holder.imageView = (ImageView) convertView.findViewById(R.id.img_produk); 
      holder.cmdMinus = (Button) convertView.findViewById(R.id.btn_min); 
      holder.cmdPlus = (Button) convertView.findViewById(R.id.btn_plus); 
      holder.qty = (TextView) convertView.findViewById(R.id.lbl_qty); 
      holder.layout1 = (LinearLayout) convertView.findViewById(R.id.layout1); 
      holder.harga = (TextView) convertView.findViewById(R.id.harga); 
      holder.satuan = (TextView) convertView.findViewById(R.id.satuan); 
      convertView.setTag(holder); 

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



     final ListItem newsItem = listData.get(position); 
     String satuan = newsItem.getSatuan().toString(); 
     String harga = newsItem.getReporterName().toString(); 
     harga = "Rp. " + harga + "/" + satuan; 
     holder.headlineView.setText(newsItem.getHeadline().toUpperCase()); 
     holder.teaserView.setText(harga); 

     SharedPreferences pref = context.getSharedPreferences("MyPref", 0); // 0 - for private mode 
     Integer qtys = Integer.parseInt(pref.getString(newsItem.getHeadline() + "_003", "0")); 
     newsItem.setQuantity(qtys); 
     holder.qty.setText(String.valueOf(newsItem.getQuantity())); 
     String a = newsItem.getUrl(); 

     holder.cmdMinus.setTag(position); 
     holder.cmdPlus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       count = newsItem.getQuantity(); 
       count++; 
       newsItem.setQuantity(count); 
       holder.qty.setText("" + count); 
       SharedPreferences pref = context.getSharedPreferences("MyPref", 0); // 0 - for private mode 
       SharedPreferences.Editor editor = pref.edit(); 
       editor.putString(newsItem.getHeadline() + "_001", newsItem.getReporterName()); // harga 
       editor.putString(newsItem.getHeadline() + "_002", newsItem.getHeadline()); //nama 
       editor.putString(newsItem.getHeadline() + "_003", String.valueOf(count)); //quantity 
       editor.putString(newsItem.getHeadline() + "_004", newsItem.getSatuan()); //satuan 
       editor.putString(newsItem.getHeadline() + "_005", newsItem.getUrl()); //url 
       editor.commit(); 
      } 
     }); 

     holder.cmdMinus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       count = newsItem.getQuantity(); 
       count--; 
        newsItem.setQuantity(count); 
        holder.qty.setText("" + count); 
        SharedPreferences pref = context.getSharedPreferences("MyPref", 0); // 0 - for private mode 
        SharedPreferences.Editor editor = pref.edit(); 
        editor.putString(newsItem.getHeadline() + "_001", newsItem.getReporterName()); // harga 
        editor.putString(newsItem.getHeadline() + "_002", newsItem.getHeadline()); //nama 
        editor.putString(newsItem.getHeadline() + "_003", String.valueOf(count)); //quantity 
        editor.putString(newsItem.getHeadline() + "_004", newsItem.getSatuan()); //satuan 
        editor.putString(newsItem.getHeadline() + "_005", newsItem.getUrl()); //url 
        editor.commit(); 

        if(count == 0) 
        { 
         SharedPreferences prefs = context.getSharedPreferences("MyPref", 0); // 0 - for private mode 
         SharedPreferences.Editor editors = prefs.edit(); 
         editors.remove(newsItem.getHeadline() + "_001"); 
         editors.remove(newsItem.getHeadline() + "_002"); 
         editors.remove(newsItem.getHeadline() + "_003"); 
         editors.remove(newsItem.getHeadline() + "_004"); 
         editors.remove(newsItem.getHeadline() + "_005"); 
         editors.commit(); 
         listData.remove(position); 
         adapter.notifyDataSetChanged(); 
        } 
      } 
     }); 

     holder.qty.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       hargax = Integer.parseInt(newsItem.getReporterName()); 
       qtyx = newsItem.getQuantity(); 
       hargax = hargax * qtyx; 
       if (context instanceof AfterLogin_Cart) 
       { 
        ((AfterLogin_Cart)context).getPrice(); 
       } 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
      ***** Change TextView from Parent Activity ******* 
      } 
     }); 

     if (holder.imageView != null) { 
      //new ImageDownloaderTask(holder.imageView).execute(newsItem.getUrl()); 
      Picasso 
        .with(context) 
        .load(a) 
        .fit() 
        .noFade() 
        .into(holder.imageView); 
     } 

     return convertView; 
    } 

    static class ViewHolder { 
     TextView headlineView; 
     TextView teaserView; 
     ImageView imageView; 
     TextView qty; 
     Button cmdPlus,cmdMinus; 
     LinearLayout layout1; 
     TextView harga,satuan; 
    } 

addTextChangeListenerから、私は親の活動からのTextViewの値を変更したいです。私がすでに探しているのは、ちょうど何らかの方法を実行することです。

if (context instanceof AfterLogin_Cart) 
{ 
    ((AfterLogin_Cart)context).getPrice(); 
} 
+1

を扱うことができます。 –

+0

あなたはあなたのアダプタの変数として 'TextWatcher'を持つことができます。次に、アダプタの作成時に、このパラメータを 'TextWatcher'を実装するアクティビティから渡します。最後に、アダプタの中で必要なメソッドを 'TextWatcher'インスタンスに委譲します – x0r

+0

@EliranTutia試してみます –

答えて

0

[OK]をここに私のコメントを説明するいくつかのサンプルコードです。だから、最初に、あなたのアダプタクラスでデリゲート変数を宣言:もちろん

public class CustomGridView3 extends BaseAdapter { 
private ArrayList<ListItem> listData = new ArrayList<ListItem>(); 
private LayoutInflater layoutInflater; 
private Context context; 
private TextWatcher textWatcherDelegate; 
private int count = 0; 
CustomGridView3 adapter = this; 
int hargax,qtyx,totalx; 
public CustomGridView3(Context context, TextWatcher textWatcherDelegate, ArrayList<ListItem> listData) { 
    this.listData = listData; 
    this.textWatcherDelegate = textWatcherDelegate; 
    layoutInflater = LayoutInflater.from(context); 
    this.context = context; 
} 

アクティビティからそれを渡す(またはあなたからあなたのアダプタを作成何でも)する必要があります。

CustomGridView3 adapter = new CustomGridView3(your_context, this, your_list) 

(ここで私は仮定しますあなたの発信者クラスがTextWatcherを実装していることを私たちはthis

してからアダプタのgetView方法であなたが委譲メソッドを使用することができます呼び出します。

holder.qty.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      textWatcherDelegate.beforeTextChanged(s, start, count, after); 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      hargax = Integer.parseInt(newsItem.getReporterName()); 
      qtyx = newsItem.getQuantity(); 
      hargax = hargax * qtyx; 
      if (context instanceof AfterLogin_Cart) 
      { 
       ((AfterLogin_Cart)context).getPrice(); 
      } 

      textWatcherDelegate.onTextChanged(s, start, before, count); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     ***** Change TextView from Parent Activity ******* 
      textWatcherDelegate.afterTextChanged(s); 
     } 
    }); 

ので、あなたはあなたがあなたの活動クラスに内部クラスとしてアダプタを作成することができ、そしてそこにあなたが簡単のTextViewに到達し、それを変更することができ、あなたの活動のTextWatcherのメソッド呼び出し

関連する問題