Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.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_Adapter - Fatal编程技术网

Android 如何在listview适配器中为交换机添加单击侦听器

Android 如何在listview适配器中为交换机添加单击侦听器,android,listview,adapter,Android,Listview,Adapter,我有一个带有适配器的listview,listview项是带有包含随机数的开关的linarlayout,如何为开关编写单击侦听器 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layo

我有一个带有适配器的listview,listview项是带有包含随机数的开关的linarlayout,如何为开关编写单击侦听器

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ListView
        android:id="@+id/lster"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp">
    </ListView>
</LinearLayout>

MainActivity.java

package com.kattah.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
    ListView lv;
    myadapter adp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ArrayList<HashMap<String, String>> RandomNumbberList = new ArrayList<>();
        int i;
        i = 0;
        while (i < 10) {
            HashMap<String, String> RandomElement = new HashMap<>();
            int rnd = new Random().nextInt(100000);
            String num = String.valueOf(rnd);
            RandomElement.put("number", num);
            RandomNumbberList.add(RandomElement);
            i = i + 1;
        }
        ArrayList<String> items;
        items = new ArrayList<String>();
        String currentrow;
        for (int u = 0; u < RandomNumbberList.size(); u++) {
            currentrow = RandomNumbberList.get(u).toString();
            items.add(currentrow);
        }
        lv = findViewById(R.id.lster);
        adp = new myadapter(this, R.layout.list_row2, items, lv);
        lv.setAdapter(adp);
    }
}
package com.kattah.myapplication;
导入androidx.appcompat.app.appcompat活动;
导入android.os.Bundle;
导入android.widget.ListView;
导入android.widget.Toast;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Random;
公共类MainActivity扩展了AppCompatActivity{
ListView lv;
myadp;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList RandomNumberList=新的ArrayList();
int i;
i=0;
而(i<10){
HashMap RandomElement=新的HashMap();
int rnd=新随机数().nextInt(100000);
String num=String.valueOf(rnd);
RandomElement.put(“数字”,num);
添加(随机化元素);
i=i+1;
}
数组列表项;
items=newarraylist();
字符串当前行;
对于(int u=0;u
list_row2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:descendantFocusability="blocksDescendants"
    android:padding="5dip">
        <Switch
            android:id="@+id/switch1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Switch"
            android:textSize="16sp" />
</LinearLayout>

myadapter.java

package com.kattah.myapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Switch;
import android.widget.Toast;
import java.util.List;
/**
 * Created by Vikram Diwakar on 1/23/2018.
 */
public class myadapter extends ArrayAdapter<String> {
    //the list values in the List of type hero
    List<String> items;
    //activity context
    Context context;
    //the layout resource file for the list items
    int resource;
    ListView lsst;
    //constructor initializing the values
    public myadapter(Context context, int resource, List<String> items, ListView lss) {
        super(context, resource, items);
        this.context = context;
        this.resource = resource;
        this.items = items;
        lsst = lss;
    }
    //this will return the ListView Item as a View
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        //we need to get the view of the xml for our list item
        //And for this we need a layoutinflater
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        //getting the view
        View view = layoutInflater.inflate(resource, null, false);
        Switch sw = (Switch) view.findViewById(R.id.switch1);
        // Get the text from the list and split it to get the random number
        String s = items.get(position);
        s = s.replace("{", "");
        s = s.replace("}", "");
        String str[] = s.split(",");
        String s1[] = str[0].split("=");
        sw.setText(s1[1]);
        sw.setTag(position);
        sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked == true) {
                    TerminalAdapter adpr = (TerminalAdapter) lsst.getAdapter();
                    final int firstListItemPosition = lsst.getFirstVisiblePosition();
                    final int lastListItemPosition = firstListItemPosition + lsst.getChildCount() - 1;
                    for (int i = firstListItemPosition; i <= lastListItemPosition; i++) {

                        LinearLayout ln;
                        ln = (LinearLayout) getViewByPosition(i, lsst);
                        Switch swth;
                        swth = (Switch) ln.getChildAt(0);

                        if (swth != buttonView) {
                            swth.setChecked(false);
                        }
                        ;

                    }
                }
        });
        return view;
    }
public View getViewByPosition(int pos, ListView listView) {
        final int firstListItemPosition = listView.getFirstVisiblePosition();
        final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

        if (pos < firstListItemPosition || pos > lastListItemPosition) {
            return listView.getAdapter().getView(pos, null, listView);
        } else {
            final int childIndex = pos - firstListItemPosition;
            return listView.getChildAt(childIndex);
        }
    }
}
package com.kattah.myapplication;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.CompoundButton;
导入android.widget.LinearLayout;
导入android.widget.ListView;
导入android.widget.Switch;
导入android.widget.Toast;
导入java.util.List;
/**
*由Vikram Diwakar于2018年1月23日创建。
*/
公共类myadapter扩展了ArrayAdapter{
//hero类型列表中的列表值
清单项目;
//活动上下文
语境;
//列表项的布局资源文件
智力资源;
ListView lsst;
//构造函数初始化值
公共myadapter(上下文上下文、int资源、列表项、ListView lss){
超级(上下文、资源、项目);
this.context=上下文;
这个资源=资源;
这个项目=项目;
lsst=lss;
}
//这将以视图的形式返回ListView项
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
//我们需要获取列表项的xml视图
//为此,我们需要一个平放机
LayoutInflater LayoutInflater=LayoutInflater.from(上下文);
//获取视图
View=LayoutFlater.inflate(资源,null,false);
Switch sw=(Switch)view.findViewById(R.id.switch1);
//从列表中获取文本并将其拆分以获得随机数
字符串s=items.get(位置);
s=s.replace(“{,”);
s=s.replace(“}”和“);
字符串str[]=s.split(“,”);
字符串s1[]=str[0]。拆分(“”);
sw.setText(s1[1]);
sw.setTag(位置);
setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(isChecked==true){
TerminalAdapter adpr=(TerminalAdapter)lsst.getAdapter();
final int firstListItemPosition=lsst.getFirstVisiblePosition();
final int lastListItemPosition=firstListItemPosition+lsst.getChildCount()-1;
for(int i=firstListItemPosition;i lastListItemPosition){
返回listView.getAdapter().getView(pos,null,listView);
}否则{
final int childIndex=pos-firstListItemPosition;
返回listView.getChildAt(childIndex);
}
}
}

我想知道将代码放在何处以及如何访问列表视图中的所有开关。

通过上次编辑解决了问题!检查上面的完整代码。

您已经有了代码来响应
onCheckedChanged()
适配器中的回调。到底是什么问题?无法触及开关按钮。抱歉,问题不清楚,我已编辑了文章。我的问题是在选择一个开关并将其打开时关闭所有开关。如何触及其余开关??数据在适配器中(在
项中)
)。在适配器中,您可以访问这些。现在我再次编辑了文章,我在适配器中添加了一个公共视图getViewByPosition,它可以通过其位置获取视图,我尝试检查所有开关以关闭它们。当所选开关打开时,也不起作用。