java - 如何将 ArrayList 项目添加到我的 ListView

标签 java android listview bluetooth

我想通过使用两个 ListView 单击配对的 蓝牙 设备来连接它们。

一个ListView应该显示所有配对的设备,这些项目应该是可点击的,并且由于点击项目本身而获得连接。然后该项目应显示在显示已连接设备的第二个 ListView 中。

我曾多次尝试解决这个问题,但未能成功。希望您能帮忙。

这是我的 fragment :

编辑:

public class MainActivityFragment extends Fragment implements OnClickListener {


Button connectButton;
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
private static final int ENABLE_BLUETOOTH = 1;

private static final String TAG = MainActivityFragment.class.getSimpleName();

ArrayList<String> mPairedDevicesArrayList;
ArrayAdapter<String> mPairedDevicesAdapter;
ListView listViewPaired, listViewConnected;

public void initBluetooth(){

    if(!mBluetoothAdapter.isEnabled()) {
        Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(intent, ENABLE_BLUETOOTH);
    }

}


@Override
public void onCreate(Bundle savedInstance){
    super.onCreate(savedInstance);

    mPairedDevicesArrayList = new ArrayList<>();

}




@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){

    View rootView = inflater.inflate(R.layout.fragment_connect, parent, false);
    connectButton = (Button) rootView.findViewById(R.id.connectButton);
    connectButton.setOnClickListener(this);

    listViewPaired = (ListView) rootView.findViewById(R.id.listViewPaired);
    listViewConnected = (ListView) rootView.findViewById(R.id.listViewConnected);



    return rootView;
}

@Override
public void onClick(View rootView){

    connectButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {


            if(mBluetoothAdapter.isEnabled()) {

                if(mBluetoothAdapter.isDiscovering()){

                    Log.i(TAG, "cancel discovery");
                    mBluetoothAdapter.cancelDiscovery();

                }

                Log.i(TAG, "Bluetooth start search");
                mBluetoothAdapter.startDiscovery();
                getPairedDevices();

            }

            else {
                Log.i(TAG, "Bluetooth not activated");
                initBluetooth();
            }

        }
    });  listViewPaired.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {



            listViewConnected.setAdapter(mPairedDevicesAdapter);

        }
    });

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            Toast.makeText(getActivity().getApplicationContext(), "Bluetooth enabled", Toast.LENGTH_LONG).show();

        } else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(getActivity().getApplicationContext(), "User canceled", Toast.LENGTH_LONG).show();
        }
    }
}

private void getPairedDevices() {
    Set<BluetoothDevice> pairedDevice = mBluetoothAdapter.getBondedDevices();
    if(pairedDevice.size()>0)
    {
        for(BluetoothDevice device : pairedDevice)
        {
            mPairedDevicesArrayList.add(device.getName()+"\n"+device.getAddress());  mPairedDevicesAdapter = new ArrayAdapter<>(getActivity().getApplicationContext(), R.layout.fragment_connect);  listViewPaired.setAdapter(mPairedDevicesAdapter);

            Log.i(TAG, "devices in List");

        }
    }

}

这是我的 Fragment-XML:

<TextView
    android:text="Welcome in Fragment!"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="36dp" />

<Button
    android:text="Connect"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="88dp"
    android:id="@+id/connectButton" />

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    tools:background="@android:color/holo_blue_bright"
    android:layout_toLeftOf="@+id/connectButton"
    android:layout_toStartOf="@+id/connectButton"
    android:layout_below="@+id/connectButton"
    android:id="@+id/listViewPaired" />

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:background="@android:color/darker_gray"
    android:layout_toRightOf="@+id/connectButton"
    android:layout_toEndOf="@+id/connectButton"
    android:layout_below="@+id/connectButton"
    android:id="@+id/listViewConnected" />

最佳答案

ArrayAdapter 使用 TextView 来显示其中的每个项目。

参见ArrayAdapter

它有许多可用的构造函数,您可以使用此构造函数用您的数据初始化适配器

ArrayAdapter(Context context, int resource, T[] objects). 

然后将其设置为您的listView

像这样:

mPairedDevicesAdapter = new ArrayAdapter<>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, mPairedDevicesArrayList);
listViewPaired.setAdapter(mPairedDevicesAdapter);

要为 ListView 行设置 onClickListener,请执行以下操作:

listViewPaired.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        // do you code
    }
}

查看更多详情here

关于java - 如何将 ArrayList 项目添加到我的 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42530965/

相关文章:

java - 如何使用电子邮件登录通过 FirebaseAuth 获取登录到 Android 应用程序的电子邮件帐户用户的照片网址

android - 如何在 Flutter 中表示 libapp.so 堆栈跟踪?

java - 执行 WS 操作后未调用 SoapHandler

java - 开发中的 Oracle jdk 和生产中的 Jrockit,这会导致任何问题吗?

android - 布局中的一半 ImageView

android - 如何将 OnTouchListener 添加到 ListView 项?

java - 在 Android ListView 适配器中存储字符串变量

Java正则表达式,匹配以x开头、以y结尾的段落

Java JScrollPane 未按预期工作

java - 在微调器上选择项目时更新 ListView