【问题标题】:Building a search for my ListView and got stucked建立对我的 ListView 的搜索并卡住了
【发布时间】:2016-01-07 07:21:22
【问题描述】:

我收到 2 个错误,一个是 cannot find symbol method findViewById(int),另一个是 cannot find symbol variable arraylist

我查看了整个代码,我找不到这段代码有什么问题。

这是我的代码:

package activity;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ListView;
import com.example.echezona.myfettle.R;
import java.util.ArrayList;
import java.util.Locale;
import adapter.ListViewAdapter;
import model.Pharmacy;

public class PharmacyFragment extends Fragment  {

    // Declare Variables
    ListView list;
    ListViewAdapter adapter;
    EditText editsearch;
    String[] name;
    String[] location;
    ArrayList<Pharmacy> arrayList = new ArrayList<Pharmacy>();

    public PharmacyFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_pharmacy, container, false);


        // Inflate the layout for this fragment
        return rootView;

        // Generate sample data


        name = new String[]{"China", "India", "United States",
                "Indonesia", "Brazil", "Pakistan", "Nigeria", "Bangladesh",
                "Russia", "Japan"};

        location = new String[]{"1,354,040,000", "1,210,193,422",
                "315,761,000", "237,641,326", "193,946,886", "182,912,000",
                "170,901,000", "152,518,015", "143,369,806", "127,360,000"};


        // Locate the ListView in listview_main.xml
     list = (ListView) findViewById (R.id.listview);

        for (int i = 0; i < name.length; i++)
        {
            Pharmacy p = new Pharmacy(name[i], location[i]);
            // Binds all strings into an array
            arrayList.add(p);
        }

        // Pass results to ListViewAdapter Class
        adapter = new ListViewAdapter(this, arrayList);

        // Binds the Adapter to the ListView
        list.setAdapter(adapter);

        // Locate the EditText in listview_main.xml
        editsearch = (EditText) findViewById(R.id.search);

        // Capture Text in EditText
        editsearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
                String text = editsearch.getText().toString().toLowerCase(Locale.getDefault());
                adapter.filter(text);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                                          int arg2, int arg3) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
                // TODO Auto-generated method stub
            }
        });
    }
}

【问题讨论】:

  • 先格式化你的代码
  • 你能输入你的 logcat 值吗?

标签: android android-listview


【解决方案1】:

好吧,我错了。在您的 oncreate 视图方法中,您正在返回视图而不调用任何视图。所以请执行以下操作。

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_pharmacy, container, false);

    // Inflate the layout for this fragment


    // Generate sample data


    name = new String[]{"China", "India", "United States",
            "Indonesia", "Brazil", "Pakistan", "Nigeria", "Bangladesh",
            "Russia", "Japan"};

    location = new String[]{"1,354,040,000", "1,210,193,422",
            "315,761,000", "237,641,326", "193,946,886", "182,912,000",
            "170,901,000", "152,518,015", "143,369,806", "127,360,000"};


    // Locate the ListView in listview_main.xml
 list = (ListView) findViewById (R.id.listview);

    for (int i = 0; i < name.length; i++)
    {
        Pharmacy p = new Pharmacy(name[i], location[i]);
        // Binds all strings into an array
        arrayList.add(p);
    }

    // Pass results to ListViewAdapter Class
    adapter = new ListViewAdapter(this, arrayList);

    // Binds the Adapter to the ListView
    list.setAdapter(adapter);

    // Locate the EditText in listview_main.xml
    editsearch = (EditText) findViewById(R.id.search);

    // Capture Text in EditText
    editsearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
            String text = editsearch.getText().toString().toLowerCase(Locale.getDefault());
            adapter.filter(text);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                                      int arg2, int arg3) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                                  int arg3) {
            // TODO Auto-generated method stub
        }
    });
          return rootView;

}

【讨论】:

    【解决方案2】:

    1.Issue找不到符号方法findViewById(int)

    在 findviewById 之前添加 rootView

    list = (ListView) rootView .findViewById (R.id.listview);
    

    return rootView; 移动到您的 onCreate 关闭的位置

    【讨论】:

    • 你比我快:P
    • 我移动了返回 rootView;到我的 onCreateView 方法结束的地方。我还在我的所有视图中添加了 rootView,但在这里我仍然收到错误 // 将结果传递给 ListViewAdapter 类
    • //这也可能是我使用的API版本造成的吗?
    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2010-09-07
    • 1970-01-01
    • 2013-09-24
    相关资源
    最近更新 更多