【问题标题】:multiple listFragments with customized adapter in FragmentActivityFragmentActivity 中带有自定义适配器的多个 listFragment
【发布时间】:2014-01-29 01:34:17
【问题描述】:

我有一个主要活动

public class MainActivity extends FragmentActivity implements ActionBar.TabListener

由 Eclipse 自动生成,带有两个选项卡,并且我创建了两个 ListFragments 以显示在每个选项卡上(也是由 Eclipse 自动生成的,我添加了我的代码并且没有删除任何覆盖的方法)

public class FragA extend ListFragment {
  private List<TypeA> list_A;
  private ArrayAdapter<TypeA> adapter;
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
  list1=new ArrayList<TypeA>();
  list1= /*gets data from db*/
  adapter = new My_A_Adapter(getActivity(),list_A);
  setListAdapter(adapter);
}


private class My_A_Adapter extends ArrayAdapter<TypeA>{
  private LayoutInflater inflater;
public My_A_Adapter (FragA activity){
super(activity, R.layout.myItemView, list_A)
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
 if(convertView==null){
   convertView = inflater.inflate(R.layout.myItemView_A, parent, false)}
   /* defining the views as setting them by iterating over the list
      getting the data by position*/
  return convertView;
}

与 FragB 的方法相同,但 FragB 列表由 android.R.layout.simple_list_item_1 而不是由自定义的 myItemView 填充

我认为上下文或某些活动属性有问题(列表中显示的字符串是正确的,但视图不是我的!!) 谁能帮我 ?谢谢

FragB 和它的适配器是完全相同的代码,只是在你看到“A”替换为“B”的地方

【问题讨论】:

  • 请用它的适配器发布 FragB 的代码。
  • 完全一样,把A换成B就行了
  • “FragB 列表由 andoir_simple_list 填充” - 这是什么意思?什么是“andoir_simple_list”?
  • @Squonk 我的意思是 android.R.layout.simple_list_item_1

标签: android android-arrayadapter android-fragmentactivity android-listfragment viewgroup


【解决方案1】:

试试这个,而不是 A_Adapter 和 B_Adapter 一样:

private class My_A_Adapter extends ArrayAdapter<TypeA>{
    private Context context;

    public My_A_Adapter (Context context, int textViewResourceId){
        super(context, textViewResourceId);
        this.context = context;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if(convertView==null){
            convertView = mInflater.inflate(R.layout.myItemView,null)
        }
        /* defining the views as setting them by iterating over the list
        getting the data by position*/
        return convertView;
    }
}

【讨论】:

  • 其实只要我在ListFragment中理解,除了getActivity()之外是没有办法传递Context的,所以把My_A_Adapater的构造函数从Activity改成Context并没有什么改变,其实我就是按照你说的但同样的问题!
  • 我编辑了代码,在最后一个不仅构造函数发生了变化,请尝试上一个版本,它应该可以解决您的问题。
  • 我猜一定是 ViewGroup Hierarchy 有问题,或者 Context 与第一个片段 Context 混合,或者 getActivity 返回 MainActivity Context 或类似的东西
  • 如果问题没有解决,请贴出完整代码,包括MainActivity、B_Fragment和B_Adapter。
  • 请检查,您在 B_Fragment 中使用了 B_Adapter。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多