【问题标题】:trying to add the class that contains list activity to fragment尝试将包含列表活动的类添加到片段
【发布时间】:2015-08-06 02:16:24
【问题描述】:

我有一个列表视图,它将根据文本和图标搜索列表视图。但是我遇到了这个错误:setListAdapter(new bsAdapter(this));它无法在片段中实现。那么我应该如何解决这个问题?

import android.app.Fragment;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Arrays;

public class ShareLineFragment extends Fragment {

    private EditText et;
    private String[] listview_names = {"Information Technology", "Healthcare", "Banking and Finance", "Law", "Teaching and Education", "Social Care", "Engineering", "Others"};

    private int[] listview_images = {R.drawable.it, R.drawable.healthcare, R.drawable.bf, R.drawable.law, R.drawable.te, R.drawable.socialcare, R.drawable.engineering, R.drawable.others};
    private int[] InformationTechnology = {R.drawable.it};
    private int[] Healthcare = {R.drawable.healthcare};
    private int[] BankingandFinance = {R.drawable.bf};
    private int[] Law = {R.drawable.law};
    private int[] TeachingandEducation = {R.drawable.te};
    private int[] SocialCare = {R.drawable.socialcare};
    private int[] Engineering = {R.drawable.engineering};
    private int[] Others = {R.drawable.others};

    private ArrayList<String> array_sort;
    private ArrayList<Integer> image_sort;
    int textlength = 0;

    private ListView lv;
    View rootView;
    Activity cntx;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_shareline, container, false);

        et = (EditText) rootView.findViewById(R.id.EditText01);
        lv = (ListView) rootView.findViewById(android.R.id.list);

        array_sort = new ArrayList<String>(Arrays.asList(listview_names));
        image_sort = new ArrayList<Integer>();

        for (int index = 0; index < listview_images.length; index++) {
            image_sort.add(listview_images[index]);
        }

        setListAdapter(new bsAdapter(this));

        et.addTextChangedListener(new TextWatcher() {
            public void afterTextChanged(Editable s) {
                // Abstract Method of TextWatcher Interface.
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // Abstract Method of TextWatcher Interface.
            }

            public void onTextChanged(CharSequence s,
                                      int start, int before, int count) {
                textlength = et.getText().length();
                array_sort.clear();
                image_sort.clear();
                for (int i = 0; i < listview_names.length; i++) {
                    if (textlength <= listview_names[i].length()) {
                        if (listview_names[i].toLowerCase().contains(
                                et.getText().toString().toLowerCase().trim())) {
                            array_sort.add(listview_names[i]);
                            image_sort.add(listview_images[i]);
                        }
                    }
                }
                AppendList(array_sort, image_sort);

            }
        });

        lv.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0,
                                    View arg1, int position, long arg3) {

                if (array_sort.get(position).equals("Information Technology")) {
                    Intent i = new Intent(getActivity(), com.example.jobshare.menu.JobType.class);
                    startActivity(i);
                }
                if (array_sort.get(position).equals("Health Care")) {
                    Intent i = new Intent(getActivity(), com.example.jobshare.menu.JobType.class);
                    startActivity(i);
                }
                if (array_sort.get(position).equals("Banking and Finance")) {
                    Intent i = new Intent(getActivity(), com.example.jobshare.menu.JobType.class);
                    startActivity(i);
                }
                if (array_sort.get(position).equals("Law")) {
                    Intent i = new Intent(getActivity(), com.example.jobshare.menu.JobType.class);
                    startActivity(i);
                }
                if (array_sort.get(position).equals("Teaching and Education")) {
                    Intent i = new Intent(getActivity(), com.example.jobshare.menu.JobType.class);
                    startActivity(i);
                }
                if (array_sort.get(position).equals("Social Care")) {
                    Intent i = new Intent(getActivity(), com.example.jobshare.menu.JobType.class);
                    startActivity(i);
                }
                if (array_sort.get(position).equals("Engineering")) {
                    Intent i = new Intent(getActivity(), com.example.jobshare.menu.JobType.class);
                    startActivity(i);
                }
                if (array_sort.get(position).equals("Others")) {
                    Intent i = new Intent(getActivity(), com.example.jobshare.menu.JobType.class);
                    startActivity(i);
                }
            }
        });

        return rootView;
    }


    public void AppendList(ArrayList<String> str, ArrayList<Integer> img) {
        setListAdapter(new bsAdapter(this));
    }

    public View getView(final int position, View convertView, ViewGroup parent)
    {
        View row=null;

        LayoutInflater inflater=cntx.getLayoutInflater();
        row=inflater.inflate(R.layout.search_list_item, null);

        TextView   tv = (TextView) row.findViewById(R.id.title);
        ImageView im = (ImageView) row.findViewById(R.id.imageview);

        tv.setText(array_sort.get(position));
        im.setImageDrawable(getResources().getDrawable(image_sort.get(position)));

        return row;
    }
}

【问题讨论】:

  • 你得到什么样的错误?
  • @Gennadii Saprykin 无法解析方法 setListAdapter 和 bsAdapter 无法应用于片段
  • @yshahak ya 但仍然给我错误无法解决方法 setListAdapter。知道如何解决这个问题吗?
  • 请编辑您的问题并输入整个片段代码
  • 和过去的日志错误到

标签: android android-fragments android-listview android-adapter


【解决方案1】:

当你需要传递 Activity 时,你将 Fragment 实例作为参数传递。

改为:

setListAdapter(new bsAdapter(getActivity()));`

编辑: 换行:

setListAdapter(new bsAdapter(this));

收件人:

lv.setAdapter(new bsAdapter(getActivity()));

还有台词:

public void AppendList(ArrayList<String> str, ArrayList<Integer> img) {
    setListAdapter(new bsAdapter(this));
}

收件人:

public void AppendList(ListView lv, ArrayList<String> str, ArrayList<Integer> img) {
    lv.setAdapter(new bsAdapter(getActivity()));
}

还有一行:

AppendList(lv, array_sort, image_sort);

【讨论】:

  • 不幸的是,我在 logcat 出现此错误原因:java.lang.NullPointerException:尝试在空对象上调用虚拟方法 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'参考
  • 所以ListView实例为空,检查你的XML id和lv中的id = (ListView) rootView.findViewById(android.R.id.list);是一样的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
相关资源
最近更新 更多