Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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
Java 仅显示ListView中的第一项_Java_Android_Listview - Fatal编程技术网

Java 仅显示ListView中的第一项

Java 仅显示ListView中的第一项,java,android,listview,Java,Android,Listview,我发现了关于这个问题的另一个问题,但是代码在一个地方出现了一个错误,似乎不适用于我的问题。抱歉,如果这是重复 我有一个活动,它应该显示用户输入的主题列表。我的问题是,当我运行应用程序时,只显示ArrayList中的第一项。老实说,我不知道错误在哪里,所以我的所有相关代码都在下面,包括XML。如果有人能给我帮助,我将不胜感激 编辑:是的,我已经调试过了。游标和ArrayList都包含预期的项,但ListView仅显示第一个项 my DatabaseHelper类中的相关函数: public Cur

我发现了关于这个问题的另一个问题,但是代码在一个地方出现了一个错误,似乎不适用于我的问题。抱歉,如果这是重复

我有一个活动,它应该显示用户输入的主题列表。我的问题是,当我运行应用程序时,只显示ArrayList中的第一项。老实说,我不知道错误在哪里,所以我的所有相关代码都在下面,包括XML。如果有人能给我帮助,我将不胜感激

编辑:是的,我已经调试过了。游标和ArrayList都包含预期的项,但ListView仅显示第一个项

my DatabaseHelper类中的相关函数:

public Cursor getSubjects(int level){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select * from "+TABLE_NAME + " where " + COL_3 + "="+level,null);
    return res;
}
“我的活动”类中的代码:

public class Level1Activity extends Activity implements OnClickListener {

private Button subject1Btn, level2Btn, level3Btn;
DatabaseHelper myDb;
private ListView lv;

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

    myDb = new DatabaseHelper(this);

    //set up buttons
    subject1Btn = (Button)findViewById(R.id.subject1);
    level2Btn = (Button)findViewById(R.id.Level2);
    level3Btn = (Button)findViewById(R.id.Level3);
    level2Btn.setOnClickListener(this);
    level3Btn.setOnClickListener(this);

    lv = (ListView)findViewById(R.id.subjectList);

    Cursor subjectCursor = myDb.getSubjects(1);

    ArrayList<String> mArrayList = new ArrayList<String>();
    for(subjectCursor.moveToFirst(); !subjectCursor.isAfterLast(); subjectCursor.moveToNext()) {
        mArrayList.add(subjectCursor.getString(1));
    }

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
            this, R.layout.subject_list_item, mArrayList);
    lv.setAdapter(arrayAdapter);
}
public class level1活动扩展活动实现OnClickListener{
私有按钮主体1btn、level2Btn、level3Btn;
数据库助手myDb;
私有ListView lv;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_level1);
myDb=新数据库助手(此);
//设置按钮
subject1Btn=(按钮)findViewById(R.id.subject1);
level2Btn=(按钮)findViewById(R.id.Level2);
level3Btn=(按钮)findViewById(R.id.Level3);
level2Btn.setOnClickListener(此);
level3Btn.setOnClickListener(此);
lv=(ListView)findViewById(R.id.subjectList);
Cursor subjectCursor=myDb.getSubjects(1);
ArrayList mArrayList=新建ArrayList();
对于(subjectCursor.moveToFirst();!subjectCursor.isAfterLast();subjectCursor.moveToNext()){
mArrayList.add(subjectCursor.getString(1));
}
ArrayAdapter ArrayAdapter=新的ArrayAdapter(
此,R.layout.subject_list_item,mArrayList);
低压设置适配器(阵列适配器);
}
以及我的xml文件中的相关代码:

subject_list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<!--  Single List Item Design -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/label"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:padding="10dip"
    android:textSize="16dip"
    android:textColor="#ffffffff"
    android:textStyle="bold" >
</TextView>

活动_level1.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/app_back">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="8">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_margin="2dp">
        <Button
            android:id="@+id/subject1"
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:onClick="onClick"
            android:text="Subject 1"
            android:textColor="#ff000000"
            android:textSize="20sp"
            android:textStyle="bold"
            android:background="#ffff0000"
            android:layout_margin="4dp"/>

        <ListView
            android:id="@+id/subjectList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </ListView>

        <Button
            android:id="@+id/newSubject"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|right"
            android:background="#ff444444"
            android:onClick="onClick"
            android:text="+"
            android:textColor="#ffff0000"
            android:textSize="80sp" />
    </LinearLayout>
</ScrollView>


关于只显示1个项目,您是否调试了光标中有多少项目?或者在
婚姻列表中添加了多少项目?请尝试调试一次

建议:

您应该在助手类本身中编写游标迭代代码,这是为了避免在活动类中编写数据库操作代码

在getSubjects()方法中包含以下代码并返回ArrayList类型:

Cursor subjectCursor = myDb.getSubjects(1);

ArrayList<String> mArrayList = new ArrayList<String>();
for(subjectCursor.moveToFirst(); !subjectCursor.isAfterLast(); subjectCursor.moveToNext()) {
    mArrayList.add(subjectCursor.getString(1));
}
cursorsubjectcursor=myDb.getSubjects(1);
ArrayList mArrayList=新建ArrayList();
对于(subjectCursor.moveToFirst();!subjectCursor.isAfterLast();subjectCursor.moveToNext()){
mArrayList.add(subjectCursor.getString(1));
}

关于只显示1个项目,您是否调试了光标中有多少项目?或者在
婚姻列表中添加了多少项目?请尝试调试一次

建议:

您应该在助手类本身中编写游标迭代代码,这是为了避免在活动类中编写数据库操作代码

在getSubjects()方法中包含以下代码并返回ArrayList类型:

Cursor subjectCursor = myDb.getSubjects(1);

ArrayList<String> mArrayList = new ArrayList<String>();
for(subjectCursor.moveToFirst(); !subjectCursor.isAfterLast(); subjectCursor.moveToNext()) {
    mArrayList.add(subjectCursor.getString(1));
}
cursorsubjectcursor=myDb.getSubjects(1);
ArrayList mArrayList=新建ArrayList();
对于(subjectCursor.moveToFirst();!subjectCursor.isAfterLast();subjectCursor.moveToNext()){
mArrayList.add(subjectCursor.getString(1));
}

我找到了问题的答案。感谢大家对调试的帮助和建议

如果其他人也有同样的问题,以下是解决方案:


ListView本身是可滚动的。它不会在ScrollView内部工作,因此在我的例子中,它只显示多个ArrayList中的一个项目。将它从ScrollView中取出,您可以指定希望它在屏幕上占据的高度,它会自动滚动这些项目。

我找到了我的答案问题。感谢大家对调试的帮助和建议

如果其他人也有同样的问题,以下是解决方案:


ListView本身是可滚动的。它不会在ScrollView内部工作,因此在我的例子中,它只显示多个ArrayList中的一个项目。从ScrollView中取出它,您可以指定它在屏幕上占据的高度,它会自动滚动项目。

列表中有多少项目
mArrayList
?不管用户添加了多少。我一直在用3测试它。你的意思是
mArrayList
有多个项目,但列表视图只显示一个项目?或者
mArrayList
本身只有一个项目?用
android.R.layout替换你的布局。简单的\u list\u item\u 1
再试一次。mArrayList已经不止一个项目,但ListView只显示第一个项目。我知道的不多,但我认为
ScrollView
将显示一个固定的高度,并将其余项目留给滚动。可能有一个项目的高度超过了该固定高度。
婚姻列表中有多少项目?
无论用户添加了多少项目。我一直在测试它3.您的意思是
mArrayList
有多个项目,但列表视图仅显示一个项目?还是
mArrayList
本身只有一个项目?将您的布局替换为
android.R.layout.simple\u list\u item\u 1
,然后重试。mArrayList有多个项目,但列表视图仅显示第一个项目。我不太清楚但是我认为
ScrollView
将显示一个固定的高度,剩下的用于滚动。可能有一个项目的高度超过了该固定高度。应该使用游标适配器hi@Paresh Mayani。我已经调试了游标和数组列表,它们都包含了我期望的所有项目。ListView只显示fir谢谢你的建议,我已经修改了我的代码,因为我可以看到这是多么的整洁。我应该使用游标适配器hi@Paresh Mayani。我已经调试了游标和数组列表,它们都是