当前位置: 首页 > 知识库问答 >
问题:

如何将自定义listview中的选定项目获取到同一自定义listview中的另一个activity

胡云瀚
2023-03-14

正在开发一个应用程序,采取学生考勤,我想得到的名单上勾选的名字“考勤”,当我点击一个“考勤”在相同的自定义列表视图。拜托,我该怎么做?

这是我的密码...自定义视图在此处输入代码

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tv_firstname"
    android:text="Firstname"
    android:textSize="11dp"
    android:ellipsize="start"
    android:lines="3"
    android:textColor="#000"
    android:textStyle="bold"
    android:gravity="center"
    android:paddingLeft="10dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Lastname"
    android:lines="3"
    android:textSize="11dp"
    android:textColor="#000"
    android:textStyle="bold"
    android:gravity="center"
    android:paddingLeft="10dp"
    android:id="@+id/tv_lastname" />


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tv_surname"
    android:text="Surname"
    android:lines="3"
    android:textSize="11sp"
    android:textColor="#000"
    android:textStyle="bold"
    android:gravity="center"
    android:paddingRight="80dp"
    android:paddingLeft="10dp" />

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingStart="20dp"
    android:id="@+id/checkBox"
    android:checked="false"
    android:focusable="false"
    android:background="@color/white" />





The Listview

在此处输入代码

ListAdapter此处输入代码公共类StudentListAdapter1扩展了BaseAdapter{private Context mContext;private List mStudentList;

//Constructor

public StudentListAdapter1(Context mContext, List<StudentList> mStudentList) {
    this.mContext = mContext;
    this.mStudentList = mStudentList;
}

@Override
public int getCount() {
    return mStudentList.size();
}

@Override
public Object getItem(int position) {
    return mStudentList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = View.inflate(mContext, R.layout.student_take, null);
    TextView tvReg_no = (TextView) v.findViewById(R.id.tv_reg_no);
    TextView tvFirstname = (TextView) v.findViewById(R.id.tv_firstname);
    TextView tvLastname = (TextView) v.findViewById(R.id.tv_lastname);
    TextView tvSurname = (TextView) v.findViewById(R.id.tv_surname);
    //Set text for TextView
    tvReg_no.setText(mStudentList.get(position).getReg_no());
    tvFirstname.setText(mStudentList.get(position).getFirstname());
    tvLastname.setText(mStudentList.get(position).getLasttname());
    tvSurname.setText(mStudentList.get(position).getSurname());

    //Save product id to tag
    v.setTag(mStudentList.get(position).getId());

    return v;

}

}

考勤activity此处输入代码protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.Layout.Activity_Student_Take100);

    lvStudentlist= (ListView) findViewById(R.id.listview_studentlist);

    mStudentList = new ArrayList<>();
    //Add sample data for list
    //We can get data from DB, webservice here
    mStudentList.add(new StudentList(1, "U11EE1001", "Bargo","S.","Mayafi"));
    mStudentList.add(new StudentList(2, "U11EE1002", "Barnsbas","Snake.","Maciji"));
    mStudentList.add(new StudentList(3, "U11EE1004", "Adamu","Tanko.","Sadau"));
    mStudentList.add(new StudentList(4, "U11EE1005", "Munzali","","Cire Tallafi"));


    //Init adapter
    adapter = new StudentListAdapter1(getApplicationContext(), mStudentList);
    lvStudentlist.setAdapter(adapter);
    checkBox = (CheckBox) findViewById(R.id.checkBox);

    lvStudentlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //Do something
            SparseBooleanArray checked = lvStudentlist.getCheckedItemPositions();
            ArrayList<String> selectedItems = new ArrayList<>();

            for (int i = 0; i < checked.size(); i++) {

                // Item position in adapter

                position = checked.keyAt(i);

                // Add names if it is checked i.e.) == TRUE!

                if (checked.valueAt(i))

                    selectedItems.add((String) adapter.getItem(position));

            }

            String[] outputStrArr = new String[selectedItems.size()];

            for (int i = 0; i < selectedItems.size(); i++) {

                outputStrArr[i] = selectedItems.get(i);
            }

            Intent intent = new Intent(getApplicationContext(),

                    ViewAttendanceActivity.class);

            // Create a bundle object

            Bundle b = new Bundle();

            b.putStringArray("selectedItems", outputStrArr);

            // Add the bundle to the intent.

            intent.putExtras(b);

            // start the ResultActivity
            startActivity(intent);
        }
    });


}

}

查看考勤activity此处输入代码protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(r.layout.activity_view_accountence);

    Bundle b = getIntent().getExtras();
    String[] resultArr = b.getStringArray("selectedItems");
    lvStudentlist= (ListView) findViewById(R.id.listview_studentlist);


    adapter = new StudentListAdapter(getApplicationContext(), mStudentList);
    lvStudentlist.setAdapter(adapter);

}

}

共有1个答案

梁丘俊材
2023-03-14

首先,我认为您应该重用listview中的项目

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v;
    if (convertView != null) {
        v = convertView;
    } else {
        v = View.inflate(mContext, R.layout.student_take, null);
    }
.......

现在回答您的问题,我认为您需要在LVStudentList.SetonItemClickListener方法中将所选项添加到数组中,然后将其作为意向性额外发送到下一个activity。您可以将String[]作为意向性额外发送,因此不需要使用bundle。

 类似资料:
  • 我试图在片段中创建自定义listView,我搜索了其他问题,但找不到任何东西。我的列表适配器是这样的 我的片段类是这样的: } 问题是这部分:CustomList adapter=新CustomList(tab1.this,string,imageId);构造函数(public CustomList(活动上下文,字符串[]web,整数[]imageId))只接受活动 我怎样才能解决这个问题?

  • 问题内容: 我浏览了教程并进行了搜索,但仍然不明白该怎么做, 当扩展在我的android应用程序中创建自定义listView 时,此方法有效。因此,我无法完全按照需要编辑“自定义”列表视图。 我需要知道何时调用此方法以及参数的含义。 如果有人可以解释以下方法很好。谢谢 问题答案: getView() :如规范中所述,getView方法将数据显示在指定位置。因此,当您设置适配器并滚动时,将调用lis

  • 问题内容: 我有一个ListView,其行中应具有以下布局: 应该是静态的,但每隔几秒钟就会更改一次。 我通过填充,将其传递给并在每次数据更改时进行设置来实现它: 我的问题是我不知道如何以上述格式显示数据。 提前致谢。 问题答案: 将此添加到你的布局文件夹 使你的主要xml布局如下 这是你的适配器 你的Java活动

  • 问题内容: 所以我有一个自定义ListView对象。列表项具有两个彼此叠放的textview,以及一个水平进度条,在我实际执行某项操作之前,我一直希望保持水平状态。最右边是一个复选框,仅在用户需要将更新下载到他们的数据库时才显示。通过将可见性设置为Visibility.GONE禁用复选框时,我可以单击列表项。当该复选框可见时,我无法单击列表中除复选框以外的任何内容。我已经进行了一些搜索,但没有找到

  • 问题内容: 我尝试使用自定义ListCell在ListView中查看自定义对象。为了说明这个问题,我选择了一个例子。同样出于演示目的,我在渲染时直接禁用了ListCell。这些项目是由线程模拟的外部过程添加的。一切看起来都很不错,直到我为禁用的ListCell应用CSS着色为止。现在看来,有些虚幻项与创建它们的ListCell一起被禁用。 我该如何解决? App.java app.css 问题答案

  • CreateView我调用适配器:@override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){//load View this.myview=inflater.inflate(r.layout.fragment_list,container,fal