Java 为什么我的scrollview会离开;阴影“;在…的后面
因此,我正在开发一个应用程序,它使用firebase加载公交车列表,以及公交车是否到达。我对这方面比较陌生,正在尝试使用片段。我可以通过总线列表成功加载片段,但是当我滚动它们时,它会留下一个项目的副本,如下所示: 主要活动:Java 为什么我的scrollview会离开;阴影“;在…的后面,java,android,android-fragments,android-scrollview,Java,Android,Android Fragments,Android Scrollview,因此,我正在开发一个应用程序,它使用firebase加载公交车列表,以及公交车是否到达。我对这方面比较陌生,正在尝试使用片段。我可以通过总线列表成功加载片段,但是当我滚动它们时,它会留下一个项目的副本,如下所示: 主要活动: public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle(null);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
BusFragment busFragment = new BusFragment();
transaction.add(R.id.buscontainer, busFragment);
transaction.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
主要活动xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.jackheinemann.schoolbus.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:minHeight="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="64dp"/>
<FrameLayout
android:id="@+id/buscontainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom">
</FrameLayout>
</LinearLayout>
总线碎片:
public class BusFragment extends Fragment {
public boolean isInitialized = false;
// Database Instance Variables
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mBusref;
private ChildEventListener mChildEventListener;
// Tablerow ID's
final Integer[] tableRows = {R.id.tablerow1, R.id.tablerow2, R.id.tablerow3,
R.id.tablerow4, R.id.tablerow5, R.id.tablerow6, R.id.tablerow7, R.id.tablerow8,
R.id.tablerow9, R.id.tablerow10, R.id.tablerow11, R.id.tablerow12,
R.id.tablerow13, R.id.tablerow14, R.id.tablerow15};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View busView = inflater.inflate(R.layout.activity_bus_fragment, container, false);
onSignedInInitialize();
init();
return busView;
}
public void onSignedInInitialize() {
if (mChildEventListener == null) {
mFirebaseDatabase = FirebaseDatabase.getInstance();
mBusref = mFirebaseDatabase.getReference().child("buses");
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
String bus_name = dataSnapshot.getKey();
Boolean bus_loc = dataSnapshot.getValue(Boolean.class);
String bus_location = Boolean.toString(bus_loc);
Integer findview = grabBusNumber(bus_name);
TextView textView = (TextView) getView().findViewById(findview);
textView.setText(bus_location);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mBusref.addChildEventListener(mChildEventListener);
}
}
public void init() {
mBusref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int i = 1;
View view = getView();
for (DataSnapshot buslist : dataSnapshot.getChildren()) {
if (i < 16) {
String bus = "Bus " + Integer.toString(i);
Boolean location = buslist.getValue(Boolean.class);
TextView bus_name = new TextView(getActivity());
TextView bus_location = new TextView(getActivity());
TableRow.LayoutParams params = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 1f);
bus_name.setText(bus);
bus_name.setTextSize(30);
bus_name.setLayoutParams(params);
bus_name.setGravity(Gravity.CENTER);
bus_location.setText(Boolean.toString(location));
bus_location.setTextSize(30);
bus_location.setLayoutParams(params);
bus_location.setGravity(Gravity.CENTER);
Integer identifier = i;
bus_location.setId(identifier);
if (view != null) {
TableRow tableRow = (TableRow) view.findViewById(tableRows[i - 1]);
tableRow.addView(bus_name);
tableRow.addView(bus_location);
i++;
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
isInitialized = true;
}
private Integer grabBusNumber(String bus_id) {
String string;
if (bus_id.charAt(1) != '_') {
string = Character.toString(bus_id.charAt(0)) + Character.toString(bus_id.charAt(1));
} else {
string = Character.toString(bus_id.charAt(0));
}
Integer integer = Integer.parseInt(string);
return integer;
}
}
公共类BusFragment扩展了片段{
公共布尔值isInitialized=false;
//数据库实例变量
私有FirebaseDatabase mFirebaseDatabase;
私人数据库参考mBusref;
私有ChildEventListener-mChildEventListener;
//表格行ID
最终整数[]tableRows={R.id.tablerow1,R.id.tablerow2,R.id.tablerow3,
R.id.tablerow4,R.id.tablerow5,R.id.tablerow6,R.id.tablerow7,R.id.tablerow8,
R.id.tablerow9,R.id.tablerow10,R.id.tablerow11,R.id.tablerow12,
R.id.tablerow13,R.id.tablerow14,R.id.tablerow15};
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
//为该碎片膨胀布局
视图总线视图=充气机。充气(R.layout.activity\u bus\u片段,容器,假);
onSignedInInitialize();
init();
返回总线视图;
}
公共void onSignedInitialize(){
if(mChildEventListener==null){
mFirebaseDatabase=FirebaseDatabase.getInstance();
mBusref=mFirebaseDatabase.getReference().child(“总线”);
mChildEventListener=new ChildEventListener(){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
字符串bus_name=dataSnapshot.getKey();
Boolean bus_loc=dataSnapshot.getValue(Boolean.class);
字符串bus_location=Boolean.toString(总线位置);
整数findview=grabBusNumber(总线名称);
TextView TextView=(TextView)getView().findViewById(findview);
textView.setText(总线位置);
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
};
mBusref.addChildEventListener(mChildEventListener);
}
}
公共void init(){
mBusref.addListenerForSingleValueEvent(新值EventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
int i=1;
View=getView();
对于(DataSnapshot总线列表:DataSnapshot.getChildren()){
如果(i<16){
String bus=“bus”+Integer.toString(i);
布尔位置=buslist.getValue(Boolean.class);
TextView总线_name=newtextView(getActivity());
TextView总线位置=新的TextView(getActivity());
TableRow.LayoutParams params=新建TableRow.LayoutParams(0,TableRow.LayoutParams.WRAP_内容,1f);
总线名称.SETEXT(总线);
总线名称。setTextSize(30);
总线名称。setLayoutParams(params);
总线名称设置重力(重心);
bus_location.setText(Boolean.toString(location));
总线位置。setTextSize(30);
总线位置。设置布局参数(参数);
总线位置设置重力(重心);
整数标识符=i;
总线位置setId(标识符);
如果(视图!=null){
TableRow=(TableRow)view.findViewById(tableRows[i-1]);
tableRow.addView(总线名称);
tableRow.addView(总线位置);
i++;
}
}
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
isInitialized=true;
}
专用整数grabBusNumber(字符串总线id){
字符串字符串;
如果(总线id.字符(1)!='''\u'){
字符串=Character.toString(总线id.charAt(0))+Character.toString(总线id.charAt(1));
}否则{
字符串=Character.toString(总线id.charAt(0));
}
整数=整数.parseInt(字符串);
返回整数;
}
}
activity_bus_fragment.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_bus_fragment"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.jackheinemann.schoolbus.BusFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:id="@+id/tablerow1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow3"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow4"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow5"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow6"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow7"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow8"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow9"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow10"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow11"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow12"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow13"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow14"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TableRow
android:id="@+id/tablerow15"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</TableLayout>
</ScrollView>
</LinearLayout>
对于这里寻找答案的任何人来说,我解决问题的方法是将片段添加更改为片段替换。出于某种原因,它添加了两次碎片,因此出现了“阴影”。替换而不是添加确保只有一个加载并修复了问题。对于这里寻找答案的任何人来说,我修复问题的方式是将碎片添加更改为碎片替换。出于某种原因,它添加了两次碎片,因此出现了“阴影”。更换而不是添加确保只有o