从适配器访问片段
Posted
技术标签:
【中文标题】从适配器访问片段【英文标题】:Access fragment from adapter 【发布时间】:2014-08-13 20:45:20 【问题描述】:我的想法是我有一个列表视图,其中每个项目都是一个产品,当我单击该项目时,我需要从列表视图适配器内部的单击转到另一个片段。
我的适配器是:
package info.android.adapter;
import info.android.ProductFragment;
import info.android.R;
import java.util.ArrayList;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ProductOffersListAdapter extends BaseAdapter
private Context context;
private ArrayList<info.android.model.ProductsOffers> navProOffers;
public ProductOffersListAdapter(Context context, ArrayList<info.android.model.ProductsOffers> navProOffers)
this.context = context;
this.navProOffers = navProOffers;
@Override
public int getCount()
return navProOffers.size();
@Override
public info.android.model.ProductsOffers getItem(int position)
return navProOffers.get(position);
@Override
public long getItemId(int position)
return position;
@Override
public View getView(int position, View convertView, ViewGroup parent)
if (convertView == null)
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.fragment_row, null);
convertView.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
// I NEED CLALL HERE FRAGMENT_PRODUCT.XML
);
ImageView img = (ImageView) convertView.findViewById(R.id.image);
TextView txtCodigo = (TextView) convertView.findViewById(R.id.txtCodigo);
TextView txtCiudad = (TextView) convertView.findViewById(R.id.txtCiudad);
TextView txtVF = (TextView) convertView.findViewById(R.id.txtVF);
String sVF = Double.toString(getItem(position).ValorFinal) + "€";
txtVF.setText(sVF);
txtCiudad.setText(getItem(position).ciudad);
txtCodigo.setText(getItem(position).codigo);
convertView.setTag(getItem(position).codigo);
img.setImageBitmap(getItem(position).Imagen);
return convertView;
你必须假设所有代码都在工作。
如何进入适配器内部的产品片段?
【问题讨论】:
【参考方案1】:您需要在构造函数中传递它。 例如:
public class ProductOffersListAdapter extends BaseAdapter
private Context context;
private ArrayList<info.android.model.ProductsOffers> navProOffers;
Fragment myFragment;
public ProductOffersListAdapter(Context context, ArrayList<info.android.model.ProductsOffers> navProOffers, Fragment myFragment)
this.context = context;
this.myFragment = myFragment;
this.navProOffers = navProOffers;
...
【讨论】:
还有...如何在点击事件中显示片段?【参考方案2】:我解决这个问题的方法是:
Intent i = new Intent(v.getContext(), MainActivity.class);
i.putExtra("fragment_value", "2");
v.getContext().startActivity(i);
在主类中,我将参数作为值,并通过开关在我感兴趣的主类中设置片段。
【讨论】:
【参考方案3】:public class ProductOffersListAdapter extends BaseAdapter
private Context context;
private ArrayList<info.android.model.ProductsOffers> navProOffers;
public ProductOffersListAdapter(Context context, ArrayList<info.android.model.ProductsOffers> navProOffers)
this.context = context;
this.navProOffers = navProOffers;
@Override
public int getCount()
return navProOffers.size();
@Override
public info.android.model.ProductsOffers getItem(int position)
return navProOffers.get(position);
@Override
public long getItemId(int position)
return position;
@Override
public View getView(int position, View convertView, ViewGroup parent)
if (convertView == null)
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.fragment_row, null);
convertView.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
// I NEED CLALL HERE FRAGMENT_PRODUCT.XML
// TO call fragment use this
AppCompatActivity appCompatActivity = (AppCompatActivity) v.getcontext();
FragmentManager fragmentManager = appCompatActivity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(frameLayout.getId(),fragment);
fragmentTransaction.commit();
);
ImageView img = (ImageView) convertView.findViewById(R.id.image);
TextView txtCodigo = (TextView) convertView.findViewById(R.id.txtCodigo);
TextView txtCiudad = (TextView) convertView.findViewById(R.id.txtCiudad);
TextView txtVF = (TextView) convertView.findViewById(R.id.txtVF);
String sVF = Double.toString(getItem(position).ValorFinal) + "€";
txtVF.setText(sVF);
txtCiudad.setText(getItem(position).ciudad);
txtCodigo.setText(getItem(position).codigo);
convertView.setTag(getItem(position).codigo);
img.setImageBitmap(getItem(position).Imagen);
return convertView;
【讨论】:
以上是关于从适配器访问片段的主要内容,如果未能解决你的问题,请参考以下文章