Android工作室适配器对齐右侧文本的一部分

时间:2017-01-05 16:38:47

标签: android listview firebase firebase-realtime-database

我正在尝试使用适配器在android studio中制作排行榜,但这样做很好: string in one line

但我想让分数显示在右侧。所以我做了这个,但滚动进来时有问题:

2 adapters

因为您可以滚动它们,所以名称和分数不匹配。

我怎么能做到这一点,因为只有一个滚动,或者某个名称在左侧,得分在右侧。

// Get ListView object from xml
final ListView nameView = (ListView) findViewById(R.id.nameView);
final ListView scoreView = (ListView) findViewById(R.id.scoreView);

// Create a new Adapter
final ArrayAdapter<String> nameAdapter = new ArrayAdapter<>(this,
        android.R.layout.simple_list_item_1, android.R.id.text1);
final ArrayAdapter<String> scoreAdapter = new ArrayAdapter<>(this,
        android.R.layout.simple_list_item_1, android.R.id.text1);

// Assign adapter to ListView
nameView.setAdapter(nameAdapter);
scoreView.setAdapter(scoreAdapter);

// Ordering with score and adding key values as string to nameList
highscoreRef.orderByChild("score").addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
        nameList.push(snapshot.child("name").getValue().toString());
        scoreList.push(snapshot.child("score").getValue().toString());
    }
    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

    }
    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }
    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        Toast.makeText(getApplicationContext(), "Error sending data.", Toast.LENGTH_LONG).show();
    }

});

//Collections.reverse(nameList);

highscoreRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        for (String name : nameList) {
            nameAdapter.add(name);
        }
        for (String score : scoreList) {
            scoreAdapter.add(score);
        }

        nameList.clear();
        scoreList.clear();
    }
}


<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="Huippupisteet"
    android:id="@+id/highscore_text"
    android:layout_gravity="center"
    android:textSize="25dp"
    android:layout_weight="0"/>


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">


    <ListView
        android:id="@+id/nameView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        >

    </ListView>
</LinearLayout>

2 个答案:

答案 0 :(得分:1)

您需要将用户名和分数字段添加到唯一列表项,然后使用单个ListView。然后在适配器中,您可以设置两个值。 。 要实现此目的,请根据此示例修改simple_list_item_1:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp">

    <TextView
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/score"
        android:ellipsize="end"
        android:maxLines="1"
        android:text="Roger" />

    <TextView
        android:id="@+id/score"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true" />

</RelativeLayout>

删除两个ListView中的一个,扩展另一个以获取所有必要的宽度并修改适配器以设置这两个值,现在两个值都显示在一个膨胀的视图中。

您必须使用扩展BaseAdapter的适配器。你可以找到一个很好的例子here

答案 1 :(得分:0)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"`enter code here`
    android:layout_height="100dp"`enter code here`
    android:background="@android:color/white"
    tools:context="com.example.anuragsingla.myapplication.MainActivity">

    <TextView`enter code here`
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:gravity="center_vertical|left"
        android:layout_marginStart="10dp"
        android:text="Jejeje" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dp"
        android:layout_marginEnd="10dp"
        android:gravity="center_vertical|right"
        android:text="3" />
</RelativeLayout>

使用上面的布局。将其替换为R.layout.simple_list_item_1。

删除其中一个Listview。使用单个列表视图并制作自定义适配器并使上述布局膨胀。我使用了两个TextView。为名称设置一个textview,为number设置另一个textview。

http://www.journaldev.com/10416/android-listview-with-custom-adapter-example-tutorial