【问题标题】:Can not get inside setOnItemSelectedListener from Spinner无法从 Spinner 进入 setOnItemSelectedListener
【发布时间】:2018-09-04 13:21:09
【问题描述】:

基于来自Android: Create spinner programmatically from array 的信息。我可以根据 ArrayList 从微调器中选择房间。但是,它永远不会进入进程 setOnItemSelectedListener。我无法弄清楚它为什么会发生。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_room);
SpaceRoomTable = (TableLayout) findViewById(R.id.tvSpaceRoomTable);
AddroomButton = (Button)findViewById(R.id.btLinkAddRoom);
Backtomenu = (Button) findViewById(R.id.bBackToMenu_DogTrack);
Delete = ContextCompat.getDrawable(this, R.drawable.bin);
dropdown = (Spinner) findViewById(R.id.spinListRoom);
summitDelete  = (Button) findViewById(R.id.btDeleteSummit);


AddroomButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent LinkToEditroom = new Intent (EditRoom.this,AddRoom.class);
        startActivity(LinkToEditroom);
    }
});

Backtomenu.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent LinkToHomeMenu = new Intent(EditRoom.this,HomeMenu.class);
        EditRoom.this.startActivity(LinkToHomeMenu);
    }
});


showRoom();


ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,showitemName);
spinnerArrayAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dropdown.setAdapter(spinnerArrayAdapter);

dropdown.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        //   Log.d("TEST","selection is ");
        Object Itemselected =    adapterView.getItemAtPosition(i);
        Toast.makeText(getApplicationContext(),"Inside"+String.valueOf(Itemselected),Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
});


}

【问题讨论】:

标签: java android


【解决方案1】:

下面的代码会自动获取选中项的文本

 public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
     //   Log.d("TEST","selection is ");
      String item = adapterView.getItemAtPosition(i).toString();
        Toast.makeText(getApplicationContext(),"Inside"+item,Toast.LENGTH_SHORT).show();

    }

【讨论】:

  • 我试过这个,但控制台显示消息 endAllStagingAnimators on 0x55abf0ca00 (ListPopupWindow$DropDownListView) with handle
  • 它永远不会进入 onItemSelected。应用程序显示消息停止运行
【解决方案2】:

在 XML 布局中:-

<Spinner
    android:id="@+id/dropdown"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

然后,在您的活动findViewById 中像这样:-

dropdown= (Spinner) findViewById(R.id.dropdown);

然后使用字符串数组和默认的spinner 布局创建ArrayAdapter:-

ArrayAdapter<String> spinnerArrayAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,showitemName);
spinnerArrayAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dropdown.setAdapter(spinnerArrayAdapter);

对于OnIemClickListener 使用如下:-

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{ 

Spinner dropdown;
String[] showitemName = {"A","B","C","D","E"};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);



   dropdown= (Spinner) findViewById(R.id.dropdown);
   dropdown.setOnItemSelectedListener(this);

    ArrayAdapter<String> spinnerArrayAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,showitemName);
    spinnerArrayAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    dropdown.setAdapter(spinnerArrayAdapter);

}

  //Performing action onItemSelected and onNothing selected
  @Override
  public void onItemSelected(AdapterView<?> parent, View arg1, int position,long id) {
  Toast.makeText(getApplicationContext(),"Inside" + parent.getItemAtPosition(position) , Toast.LENGTH_LONG).show();
}

  @Override
  public void onNothingSelected(AdapterView<?> arg0) {
  // TODO Auto-generated method stub

}
}

更多信息:

您可以通过以下链接查看详细信息:-

https://developer.android.com/guide/topics/ui/controls/spinner.html https://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html https://android--code.blogspot.in/2015/08/android-spinner-onitemselected.html http://www.java2s.com/Code/Android/UI/SpinnerItemSelectedListener.htm https://android--code.blogspot.in/2015/08/android-spinner-get-selected-item-text.html

【讨论】:

  • 谢谢,我试试!!
  • @Mr.Kim 好的试试看,如果可行,请接受我的回答并投反对票
  • 实际上,showroom 方法与 Firebase 的数据快照相关,因此 ArrayList 一直在更改。我可能有这个问题。我只是猜测一个假设。
  • @Abhinav我已经发布了陈列室();请检查一下
  • @Abhinavl 该值来自 Firebase,因此 showitemName 将从 Firebase 获得值
【解决方案3】:

有关陈列室方法的更多信息

public void showRoom()
{
    refroom.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(final DataSnapshot dataSnapshot) {
            int Length_Record = dataSnapshot.child("CurrentUser").child("Tracking").child("ListRoom").child("LIST_ROOM_LENGTH").getValue(int.class);
            int RunRecord =0;
            int printRoom =0;
            final String userId = dataSnapshot.child("CurrentUser").child("UserId").getValue(String.class);


            for (DataSnapshot zonesnapshot : dataSnapshot.child("CurrentUser").child("Tracking").child("ListRoom").getChildren())
            {
                if(printRoom!=Length_Record)
                {
                    zonesnapshot.getValue();
                    String[] parts = String.valueOf(zonesnapshot.getValue()).split(",");
                    String part1 = parts[0]; // Room Id
                    String part2 = parts[1]; // Room Name
                    String part3 = parts[2]; // TypeRoom
                    String OnRoom = dataSnapshot.child("CurrentUser").child("Tracking").child("Location").getValue(String.class);

                    itemsName.add(part2+","+part3);  // put to arraylist to prepare a room choice for deletion
                    showitemName.add(part2+"("+part3+")");
                    itemOfUser.put(userId+"Room"+printRoom,part2+","+part3);  // keep room for each user

                    inRow(dataSnapshot.child("CurrentUser").child("UserId").getValue(String.class), RunRecord, part2, OnRoom, part3);

                }
                printRoom++;

            }



            summitDelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    storageReference = storage.getInstance().getReferenceFromUrl("gs://********-*****.appspot.com/imagesRoom").child(userId).child(selection);

                    storageReference.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {

                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                           Toast.makeText(getApplicationContext(),"Error Can not delete file",Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            });


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

【讨论】:

    猜你喜欢
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2011-06-22
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多