新的安卓开发者在这里。现在一直在与同样的问题作斗争,是时候寻求帮助了。我有一个在 FragmentActivity 中扩展 FragmentPagerAdapter 的应用程序(利用 android.support.app.v4 库),前 2 页包含列表片段(不是 ListFragments,请注意,我将 ListViews 放在上面的常规片段)。基本上,我的应用程序将一些数据从服务发送到自定义 ArrayAdapter。诀窍是,第一页和第二页上的 ListView 是基于相同的数据;最终,将有一些不同的渲染和商业逻辑应用于每个,但现在我只是试图让两个列表都出现。出于本测试的目的,每个列表都应该以相同的数据开始,并且列表中的每个项目都有一个按钮;单击按钮应该使该行从当前片段的列表中消失,但不会从另一个列表中消失。这是我的代码:
public class CustomBillAdapterTest extends ArrayAdapter<MasterBill> {
Context context;
private ArrayList<MasterBill> billRows;
int resourceID;
private static LayoutInflater inflater = null;
public FragmentActivity fragment;
public ImageLoader imageLoader;
AppService as;
public CustomBillAdapterTest(FragmentActivity fragment, int resourceID, ArrayList<MasterBill> billRows) {
super(fragment, resourceID, billRows);
this.context = fragment;
this.billRows = billRows;
this.fragment = fragment;
this.resourceID = resourceID;
try {
as = (AppService) fragment.getApplicationContext();
imageLoader = new ImageLoader(fragment.getApplication());
} catch (Exception e) {
e.printStackTrace();
}
}
public int getCount() {
return billRows.size();
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
MasterBill master = getItem(position);
View vi = convertView;
if (convertView == null) {
inflater = (LayoutInflater) this.fragment.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(resourceID, null);
}
TextView itemText = (TextView) vi.findViewById(R.id.itemText);
TextView price = (TextView) vi.findViewById(R.id.price);
ImageView itemIcon = (ImageView) vi.findViewById(R.id.itemIcon);
Button button = (Button) vi.findViewById(R.id.button1);
itemText.setText(master.item_text);
price.setText(master.price);
imageLoader.DisplayImage(master.icon, itemIcon);
Log.d("position", Integer.toString(position));
button.setTag(position);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(fragment, "test2", Toast.LENGTH_SHORT).show();
billRows.remove(position);
notifyDataSetChanged();
}
});
return vi;
}
然后是 Fragment 中的代码,回到主活动类中:
public static class MyBillFragment extends Fragment {
private ListView list;
private static CustomBillAdapterTest adapter;
public MyBillFragment newInstance() {
MyBillFragment myBill = new MyBillFragment();
return myBill;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.mybill_frag, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
list = (ListView) this.getActivity().findViewById(R.id.list);
adapter = new CustomBillAdapterTest(this.getActivity(), R.layout.mybill_frag_listitem, myBill);
list.setAdapter(adapter);
}
}
然后还有另一个重复的类,就像那个一样,除了不同的名称,它将一个不同的(但最初是重复的)ArrayList 传递给适配器。
这是问题所在:当我启动它时,两个列表页面都正确显示,但是当我单击一个页面中列表项的按钮时,一个项目从另一页的列表中消失。而且不是同一个项目——总是另一页的最后一个。有任何想法吗?