ListView 未显示/出现 android studio

Posted

技术标签:

【中文标题】ListView 未显示/出现 android studio【英文标题】:ListView not showing up / appearing 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_
android:layout_
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_
    android:layout_
    android:id="@+id/profile_layout"
    android:layout_below="@+id/toolbar"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true">

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

    <ListView android:id = "@+id/listView"
        android:layout_
        android:layout_/>

</RelativeLayout>

</RelativeLayout>

show_tasks.xml:

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

</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 错误(如果有)。 【参考方案1】:

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

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

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

如果您想保留自定义视图,这是一个很好的示例:https://***.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);

完成了。

【讨论】:

以上是关于ListView 未显示/出现 android studio的主要内容,如果未能解决你的问题,请参考以下文章

ListView未出现在应用程序中

Listview 项目未在 Fragment Android 中显示

Firebase Android ListView 未显示

Firebase Android ListView 未显示

ScrollView 中的 Android ListView 行未完全显示 - 已剪辑

Android 5 中未显示 ListView 分隔符