【问题标题】:ListView not showing up / appearing android studioListView 未显示/出现 android studio
【发布时间】:2016-06-27 20:44:45
【问题描述】:

我有两个活动。 MainActivity.java 和 HomeActivity.java。我试图在 HomeActivity.java 中创建一个 ListView,仅使用“一”、“二”、“三”和“四”作为列表项,但 ListView 根本没有显示。

HomeActivity.java:

public class HomeActivity extends AppCompatActivity {

String personName;
String email;
String rfid;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    populateListView();

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        personName = extras.getString("Name");
        email = extras.getString("Email");
        rfid = extras.getString("RFID");
    }

    String params = (email + "+" + rfid);

    new MyAsyncTask().execute(new Pair<Context, String>(this, params));

    toolbar.findViewById(R.id.ButtonSettings).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popup = new PopupMenu(HomeActivity.this, findViewById(R.id.ButtonSettings));
            popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
            popup.getMenu().add(personName);
            popup.getMenu().add(email);
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Toast.makeText(
                            HomeActivity.this, "You Clicked" + item.getTitle(), Toast.LENGTH_SHORT).show();
                    return true;
                }
            });
            popup.show();
        }
    });
}

private void populateListView(){
    String [] myItems = {"One", "Two", "Three", "Four"};

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.show_tasks, myItems);

    ListView list = (ListView) findViewById(R.id.listView);
    list.setAdapter(adapter);
}
}

content_home.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="ie.myy3p.ticktask.HomeActivity"
tools:showIn="@layout/activity_home">

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/profile_layout"
    android:layout_below="@+id/toolbar"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tView"
        android:layout_alignBottom="@id/toolbar"
        android:layout_alignParentEnd="true" />

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

</RelativeLayout>

</RelativeLayout>

show_tasks.xml:

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

</TextView>

编辑:

所以我对代码进行了一些更改,现在我的 ListView 显示在 Android Studio 的 content_home.xml 和 activity_home.xml 中,这是以前没有的。但是,当我在手机上运行应用程序时,ListView 不会出现。我已经调试了它并检查了我的 populateList 方法,它似乎工作正常。在 populateList 方法末尾调试时读取:

this = {HomeActivity@20765}
myItems = {String[4]@20825}
adapter = {ArrayAdapter@20841}
list = {ListView@20853} "android.widget.ListView... etc

【问题讨论】:

  • 发布您的 logcat 错误(如果有)。

标签: java android listview


【解决方案1】:

通过为适配器提供自定义视图,您需要一个额外的步骤来填充该自定义视图如何使用数组适配器数据进行填充。最简单的解决方案就是放弃自定义视图并使用简单列表:

adapter = new ArrayAdapter<String>(this, 
                                   android.R.layout.simple_list_item_1, 
                                   myItems);

如果您想继续为您的单元格使用自定义视图,您需要创建一个自定义适配器类来覆盖getView(),以告诉列表视图如何给定您的字符串值,它如何填充视图,本质上是它在你的 textView 上设置文本(不过这是android.R.layout.simple_list_item_1 的默认行为)。

如果您想保留自定义视图,这是一个很好的示例:https://stackoverflow.com/a/15832564/1316346

编辑:

看起来你也在夸大错误的视图:

setContentView(R.layout.activity_home);

正在使用名为 activity_home 的资源进行膨胀,根据您发布的内容,它可能应该是:

setContentView(R.layout.content_home);

【讨论】:

  • 感谢您的帮助。不幸的是,即使我将代码从自定义视图更改为简单列表,ListView 仍然没有显示
  • @Aine 检查我的编辑,看起来你可能夸大了错误的视图。如果这不起作用,请开始注释掉您的一些视图代码,以便它是一个简单的列表视图,以确保它不会被其他视图覆盖。
【解决方案2】:

在此处更改。

private void populateListView(){
  String [] myItems = {"One", "Two", "Three", "Four"};
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.show_tasks, myItems);
  ListView list = (ListView) findViewById(R.id.listView);
  list.setAdapter(adapter);
}

到这里

private void populateListView(){
  String [] myItems = {"One", "Two", "Three", "Four"};
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, android.R.id.text1, myItems);
  ListView list = (ListView) findViewById(R.id.listView);
  list.setAdapter(adapter);

}

备选方案 2

从此更改设置内容视图

setContentView(R.layout.activity_home);

到这里

setContentView(R.layout.content_home);

完成了。

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 2021-06-19
    • 2021-06-03
    • 2021-08-16
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多