Android Studio开发ListView遇ArrayAdapter相关错误,求解决方法
Hey there! Let's get those two errors sorted out for your ListView implementation—they're easy fixes once you know what's missing.
Error 1: cannot find symbol class ArrayAdapter
Root Cause
Your code is trying to use the ArrayAdapter class, but you haven't imported it into your HomeActivity file. Android's compiler doesn't know where to find this class without the proper import statement.
Solution
Add this import line at the top of your HomeActivity.java file, right after the existing imports:
import android.widget.ArrayAdapter;
Error 2: cannot find symbol variable listAdapter
Root Cause
You're assigning a value to listAdapter without first declaring its type. Java requires all variables to be explicitly declared before they're used.
Solution
Declare the listAdapter variable with its correct type when you initialize it. Replace this line:
listAdapter = new ArrayAdapter<String>(this, R.layout.row, planetList);
With this:
ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, R.layout.row, planetList);
Or if you prefer to declare it earlier in the method, you can do:
// Declare the variable first ArrayAdapter<String> listAdapter; // Then initialize it later listAdapter = new ArrayAdapter<String>(this, R.layout.row, planetList);
Full Modified HomeActivity Code
Here's what your corrected HomeActivity.java should look like:
package viewsoftware.quote; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.widget.ListView; import android.widget.ArrayAdapter; // Added import import android.view.View; import java.util.*; public class HomeActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); ListView cantieriListView = (ListView) findViewById(R.id.ListViewCantieri); // Create and populate a List of planet names. String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"}; ArrayList<String> planetList = new ArrayList<String>(); planetList.addAll(Arrays.asList(planets)); // Declare and initialize the ArrayAdapter ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, R.layout.row, planetList); // Add more planets listAdapter.add("Ceres"); listAdapter.add("Pluto"); listAdapter.add("Haumea"); listAdapter.add("Makemake"); listAdapter.add("Eris"); // Set the adapter to the ListView cantieriListView.setAdapter(listAdapter); } }
Quick Optimization Tip
Your row.xml has a LinearLayout wrapping a single TextView—you can simplify this by making the TextView the root element to reduce unnecessary view hierarchy:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rowTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:textSize="16sp" />
内容的提问来源于stack exchange,提问作者riki

