Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何通过主活动更新片段之间的listview内容_Android_Listview_Android Fragments_Android Listview - Fatal编程技术网

Android 如何通过主活动更新片段之间的listview内容

Android 如何通过主活动更新片段之间的listview内容,android,listview,android-fragments,android-listview,Android,Listview,Android Fragments,Android Listview,我有三个片段,第二个和第三个,在各自的布局中有一个listView 最初,“第二帧和第三帧”的列表视图都填充了相同的项。换句话说,最初的列表视图是 第二个片段和第三个片段包含以下内容,其中CB:is checkBox和IV:is ImageView和t:textview,SaveButton是buton t1........CB.......IV t2........CB.......IV t3........CB.......IV t4........CB.......IV t5.......

我有三个片段,第二个和第三个,在各自的布局中有一个listView

最初,“第二帧和第三帧”的列表视图都填充了相同的项。换句话说,最初的列表视图是 第二个片段和第三个片段包含以下内容,其中CB:is checkBox和IV:is ImageView和t:textview,SaveButton是buton

t1........CB.......IV
t2........CB.......IV
t3........CB.......IV
t4........CB.......IV
t5........CB.......IV
t6........CB.......IV
    SaveButton
我想做的是,当我在第二个片段中,并“使用复选框”从listView中选择一个项目,然后单击“保存”按钮时,我选择的项目应该从第三个片段的listView中删除

为了实现这一点,在getview()中,我检查了第二个片段的listView中是否选中了复选框,如果选中了,则添加选中的项 加入一个列表。如getView()所示:

第二个片段

private void setUpListView() {
    // TODO Auto-generated method stub
    this.topicsList = new ArrayList<String>();

    for (int i = 0; i < this.topics.length; i++) {
        this.topicsList.add(topics[i]);
    }

    this.adapter = new ListViewAdapter(getActivity(), this.topicsList, ECO_FRAG_ID);
    this.listView.setAdapter(adapter);
}
private void setUpListView() {
    // TODO Auto-generated method stub
    this.topicsList = new ArrayList<String>();

    for (int i = 0; i < this.topics.length; i++) {
        this.topicsList.add(topics[i]);
    }

    this.adapter = new ListViewAdapter(getActivity(), this.topicsList, LOGGER_FRAG_ID);
    this.listView.setAdapter(adapter);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    if (convertView == null) {
        LayoutInflater layoutinflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = layoutinflater.inflate(R.layout.list_items_layout, null);
    }

    if (this.checkedItemsList1 == null) {
        this.checkedItemsList1 = new ArrayList<String>();
    }

    if (this.checkedItemsList2 == null) {
        this.checkedItemsList2 = new ArrayList<String>();
    }

    final TextView tv = (TextView) convertView.findViewById(R.id.tvlist_topic);
    final CheckBox cb = (CheckBox) convertView.findViewById(R.id.cbList_hook);
    final ImageView iv = (ImageView) convertView.findViewById(R.id.ivList_delete);

    tv.setText(this.topicsList.get(position));

    if (cb.isChecked() && (this.id == 1) ) {
        this.checkedItemsList1.add(this.topicsList.get(position));
        this.setCheckedItemsList1(this.checkedItemsList1);
    }
    if (cb.isChecked() && (this.id == 2) ) {
        this.checkedItemsList2.add(this.topicsList.get(position));
        this.setCheckedItemsList2(this.checkedItemsList2);
    }

    iv.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (cb.isChecked())
                cb.setChecked(false);

            topicsList.remove(position);
            notifyDataSetChanged();
        }
    });

    return convertView;
}
在这个界面上,main活动实现了它,在接口的实现中,我将选中项的列表从第二个片段传递到第三个片段 通过第三个fragmet中的公共方法进行分段,该方法更新列表,然后将列表分配给适配器,如下所示:

@Override
public void onCheckedStateChanged(ArrayList<String> list, int id) {
    // TODO Auto-generated method stub

    switch (id) {
    case 1:
        ((Logger_Settings_Frag) this.fragList.get(2)).updateTopicList(list);
        break;
    case 2:

        break;
    }
}

**updateTopicList in the third fragment**

public void updateTopicList(ArrayList<String> list) {
    for (String str : list) {
        this.topicsList.remove(str);
    }

    this.adapter = new ListViewAdapter(getActivity(), this.topicsList, LOGGER_FRAG_ID);
    this.listView.setAdapter(adapter);
}
@覆盖
已更改CheckedStateChanged(ArrayList列表,int id)时的公共无效{
//TODO自动生成的方法存根
开关(id){
案例1:
((Logger_Settings_Frag)this.fragList.get(2)).updateTopicList(list);
打破
案例2:
打破
}
}
**第三个片段中的updateTopicList**
公共void updateTopicList(ArrayList列表){
for(字符串str:list){
此.topicsList.remove(str);
}
this.adapter=new ListViewAdapter(getActivity(),this.topicsList,LOGGER\u FRAG\u ID);
this.listView.setAdapter(适配器);
}
第三个片段中的updateTopicList

public void updateTopicList(ArrayList<String> list) {
    for (String str : list) {
        this.topicsList.remove(str);
    }

    this.adapter = new ListViewAdapter(getActivity(), this.topicsList, LOGGER_FRAG_ID);
    this.listView.setAdapter(adapter);
}
public void updateTopicList(ArrayList列表){
for(字符串str:list){
此.topicsList.remove(str);
}
this.adapter=new ListViewAdapter(getActivity(),this.topicsList,LOGGER\u FRAG\u ID);
this.listView.setAdapter(适配器);
}
当我运行该代码时,在第二个片段的saveButton侦听器中,log.d消息显示应该包含已检查项的列表的大小为零


请看一下代码,让我知道我缺少了什么?

试试看:这是一个带有两个片段的Project OneActivity示例: 公共阵列列表myBeansList_frgnt1; 公共阵列列表myBeansList_frgnt2; 单击“保存”按钮,迭代myBeansList\u frgnt1并检查是否选择了任何项目。如果选择了项目,我会将该项目添加到myBeansList\u frgnt2。显示在fragment2中

主要活动:

public class MainActivity extends FragmentActivity {
private FragmentManager mFragmentManager;
private MyFragment1 myFragment1;
public ArrayList<MyBean> myBeansList_frgnt1;
public ArrayList<MyBean> myBeansList_frgnt2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mFragmentManager = getSupportFragmentManager();
    myBeansList_frgnt1 = new ArrayList<MyBean>();
    myBeansList_frgnt2 = new ArrayList<MyBean>();

}

@Override
protected void onResume() {
    super.onResume();
    myFragment1 = new MyFragment1();
    FragmentTransaction mTransaction = mFragmentManager.beginTransaction();
    mTransaction.replace(R.id.framid, myFragment1, "applock").commit();
}
片段1:

public class MyFragment1 extends Fragment {
private ListView mListView;
private MyBaseAdpter myBaseAdpter;
private Button mButton;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_layout, null);
    mListView = (ListView) view.findViewById(R.id.listviewid);
    mButton = (Button) view.findViewById(R.id.bttnid);
    return view;
}

@Override
public void onResume() {
    super.onResume();
    final MainActivity mActivity = (MainActivity) getActivity();
    myBaseAdpter = new MyBaseAdpter(mActivity.myBeansList_frgnt1, getActivity());
    mListView.setAdapter(myBaseAdpter);
    mButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            int size = mActivity.myBeansList_frgnt1.size();
            for (int i = 0; i < size; i++) {
                MyBean mMyBean = mActivity.myBeansList_frgnt1.get(i);
                if (mMyBean.isChecked()) {
                    mActivity.myBeansList_frgnt2.add(mMyBean);
                }
            }
        }
    });
}
}

MyBean:

public class MyBean {
private String mName;
private int mImgId;
private boolean isChecked;

public String getmName() {
    return mName;
}

public void setmName(String mName) {
    this.mName = mName;
}

public int getmImgId() {
    return mImgId;
}

public void setmImgId(int mImgId) {
    this.mImgId = mImgId;
}

public boolean isChecked() {
    return isChecked;
}

public void setChecked(boolean isChecked) {
    this.isChecked = isChecked;
}

public MyBean() {
    super();
    // TODO Auto-generated constructor stub
}

}

单击“保存”按钮后,您希望从第三个片段中删除项目,那么在第二个片段中,您希望删除的选定项目是什么呢?No,id o不希望删除它们。应保留第二个片段中已查看的片段,并将其从第三个片段的列表视图中删除。问题是,在第二个片段中的savebutton侦听器中,表示包含选定项的列表的大小为零。您能告诉我如何按位置引用getView()中的项吗?我的意思是如何知道当前选中复选框的位置?等等。。。我会告诉你的
public class MyFragment1 extends Fragment {
private ListView mListView;
private MyBaseAdpter myBaseAdpter;
private Button mButton;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_layout, null);
    mListView = (ListView) view.findViewById(R.id.listviewid);
    mButton = (Button) view.findViewById(R.id.bttnid);
    return view;
}

@Override
public void onResume() {
    super.onResume();
    final MainActivity mActivity = (MainActivity) getActivity();
    myBaseAdpter = new MyBaseAdpter(mActivity.myBeansList_frgnt1, getActivity());
    mListView.setAdapter(myBaseAdpter);
    mButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            int size = mActivity.myBeansList_frgnt1.size();
            for (int i = 0; i < size; i++) {
                MyBean mMyBean = mActivity.myBeansList_frgnt1.get(i);
                if (mMyBean.isChecked()) {
                    mActivity.myBeansList_frgnt2.add(mMyBean);
                }
            }
        }
    });
}
public class MyFragment2 extends Fragment {
private ListView mListView;
private MyBaseAdpter myBaseAdpter;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_layout, null);
    mListView = (ListView) view.findViewById(R.id.listviewid);
    return view;
}

@Override
public void onResume() {
    super.onResume();
    MainActivity mActivity = (MainActivity) getActivity();
    myBaseAdpter = new MyBaseAdpter(mActivity.myBeansList_frgnt2, getActivity());
    mListView.setAdapter(myBaseAdpter);
}
public class MyBean {
private String mName;
private int mImgId;
private boolean isChecked;

public String getmName() {
    return mName;
}

public void setmName(String mName) {
    this.mName = mName;
}

public int getmImgId() {
    return mImgId;
}

public void setmImgId(int mImgId) {
    this.mImgId = mImgId;
}

public boolean isChecked() {
    return isChecked;
}

public void setChecked(boolean isChecked) {
    this.isChecked = isChecked;
}

public MyBean() {
    super();
    // TODO Auto-generated constructor stub
}