アダプタから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();
}
を扱うことができます。 –
あなたはあなたのアダプタの変数として 'TextWatcher'を持つことができます。次に、アダプタの作成時に、このパラメータを 'TextWatcher'を実装するアクティビティから渡します。最後に、アダプタの中で必要なメソッドを 'TextWatcher'インスタンスに委譲します – x0r
@EliranTutia試してみます –