使用自定义适配器Json片段

时间:2017-12-01 12:27:02

标签: android json android-fragments autocompletetextview

当用户开始在EditText字段中输入时,我希望AutoComplete成为EditText。我已创建此代码

public class PegawaiFragment extends Fragment {
    public static PegawaiFragment newInstance() {
        PegawaiFragment fragment = new PegawaiFragment();
        return fragment;
    }
    String namapegawai;
    AutoCompleteTextView textAutoComplete;

    ListView StudentListView;
    ProgressBar progressBar;
    String HttpUrl = "http://192.168.43.241/Android/MyKoperasi/PegawaiDashboard.php";
    List<String> IdList = new ArrayList<>();

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

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

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
        namapegawai = prefs.getString(MainActivity.UserName,MainActivity.UserName);
        TextView NamaPegawai = v.findViewById(R.id.TextViewNamaPegawai);
        NamaPegawai.setText(namapegawai);

        textAutoComplete = v.findViewById(R.id.autoCompleteTextView1);
        ArrayAdapter adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1);
        textAutoComplete.setAdapter(adapter);
        textAutoComplete.setThreshold(1);

        StudentListView = v.findViewById(R.id.listview2);
        progressBar = v.findViewById(R.id.progressBar1);
        new GetHttpResponse(getActivity()).execute();
        //Adding ListView Item click Listener.
        StudentListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                // TODO Auto-generated method stub
                //Intent intentSemuaMemberLihat = new Intent(getActivity(),SemuaMemberLihat.class);
                // Sending ListView clicked value using intent.
                //intentSemuaMemberLihat.putExtra("ListViewValue", IdList.get(position).toString());
                //startActivity(intentSemuaMemberLihat);
            }
        });

        return v;
    }

    // JSON parse class started from here.
    class GetHttpResponse extends AsyncTask<Void, Void, Void>
    {
        public Context context;

        String JSonResult;

        List<Member> studentList;

        public GetHttpResponse(Context context)
        {
            this.context = context;
        }

        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... arg0)
        {
            // Passing HTTP URL to HttpServicesClass Class.
            HttpServicesClass httpServicesClass = new HttpServicesClass(HttpUrl);
            try
            {
                httpServicesClass.ExecutePostRequest();

                if(httpServicesClass.getResponseCode() == 200)
                {
                    JSonResult = httpServicesClass.getResponse();

                    if(JSonResult != null)
                    {
                        JSONArray jsonArray = null;

                        try {
                            jsonArray = new JSONArray(JSonResult);

                            JSONObject jsonObject;
                            Member member;
                            studentList = new ArrayList<Member>();

                            for(int i=0; i<jsonArray.length(); i++)
                            {
                                member = new Member();
                                jsonObject = jsonArray.getJSONObject(i);

                                // Adding Student Id TO IdList Array.
                                IdList.add(jsonObject.getString("id").toString());
                                //Adding Student Name.
                                member.nama = jsonObject.getString("nama").toString();
                                //member.nrp = jsonObject.getString("nrp").toString();
                                studentList.add(member);
                            }
                        }
                        catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
                else
                {
                    Toast.makeText(context, httpServicesClass.getErrorMessage(), Toast.LENGTH_SHORT).show();
                }
            }
            catch (Exception e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result)
        {
            progressBar.setVisibility(View.GONE);
            StudentListView.setVisibility(View.VISIBLE);

            if(studentList != null) {
                ListAdapterClass adapter = new ListAdapterClass(studentList, context);
                StudentListView.setAdapter(adapter);
            }else
            {
                Toast.makeText(context, "Tidak ada data ditampilkan", Toast.LENGTH_SHORT).show();
            }

        }
    }

}

此代码显示完美,但是当我开始在autoCompleteTextView1中键入EditText时,没有任何建议名称。我想这就在这里

    textAutoComplete = v.findViewById(R.id.autoCompleteTextView1);
    ArrayAdapter adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1);
    textAutoComplete.setAdapter(adapter);
    textAutoComplete.setThreshold(1);

但为什么EditText没有显示建议呢?相反,我的ListView在那里完美。

这是我的XML代码

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.network.poeja.mykoperasi.PegawaiFragment">

    <TextView
        android:id="@+id/TextViewNamaPegawai"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <AutoCompleteTextView
        android:layout_weight="1"
        android:id="@+id/autoCompleteTextView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Text Auto Complete"
        android:layout_below="@+id/TextViewNamaPegawai">
        <requestFocus />
    </AutoCompleteTextView>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="50dp"
        android:layout_below="@+id/autoCompleteTextView1">

        <!-- TODO: Update blank fragment layout -->
        <ListView
            android:id="@+id/listview2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true"
            android:layout_below="@+id/logos"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="50dip"/>

        <ProgressBar
            android:id="@+id/progressBar1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:visibility="visible" />
    </RelativeLayout>

</FrameLayout>

=============== ADAPTER CLASS

public class ListAdapterClass extends BaseAdapter {

    Context context;
    List<Member> valueList;
    public ListAdapterClass(List<Member> listValue, Context context)
    {
        this.context = context;
        this.valueList = listValue;
    }

    @Override
    public int getCount()
    {
        return this.valueList.size();
    }

    @Override
    public Object getItem(int position)
    {
        return this.valueList.get(position);
    }

    @Override
    public long getItemId(int position)
    {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewItem viewItem = null;

        if(convertView == null)
        {
            viewItem = new ViewItem();

            LayoutInflater layoutInfiater = (LayoutInflater)this.context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

            convertView = layoutInfiater.inflate(R.layout.listview_item, null);

            viewItem.TextViewNama = convertView.findViewById(R.id.textViewNama);
            viewItem.TextViewNrp = convertView.findViewById(R.id.textViewNrp);

            convertView.setTag(viewItem);

        }
        else
        {
            viewItem = (ViewItem) convertView.getTag();
        }
        viewItem.TextViewNama.setText(valueList.get(position).nama);
        viewItem.TextViewNrp.setText(valueList.get(position).nrp);
        return convertView;
    }
}

class ViewItem
{
    TextView TextViewNama, TextViewNrp;

}

1 个答案:

答案 0 :(得分:0)

您需要提供Array包含ArrayAdapter的数据。它是适配器将搜索的数据源。以下是如何使用ArrayAdapterAutoCompleteTextView -

的示例
public class MainActivity extends Activity {
    String[] data = {"Apple", "Banana", "Cherry", "Date", "Grape", "Kiwi", "Mango", "Pear"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Creating the instance of ArrayAdapter containing list of fruit names
        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this, android.R.layout.simple_list_item_1, data);
        //Getting the instance of AutoCompleteTextView
        AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
        actv.setThreshold(1);//will start working from first character
        actv.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView
        actv.setTextColor(Color.RED);

    }
}

根据您的AutoCompleteTextView代码。我找到了解决方案。

 String[] data = {"Apple", "Banana", "Cherry", "Date", "Grape", "Kiwi", "Mango", "Pear"};
GetHttpResponse getHttpResponse = new GetHttpResponse(getActivity()); 
getHttpResponse.execute();
    textAutoComplete = v.findViewById(R.id.autoCompleteTextView1);
List<Member> studentList = getHttpResponse.getStudentList();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, studentList.toArray(new String[studentList.size()]));
        textAutoComplete.setAdapter(adapter);
        textAutoComplete.setThreshold(1);

添加一个从GetHttpResponse类获取studentList的方法 -

// JSON parse class started from here.
    class GetHttpResponse extends AsyncTask<Void, Void, Void>
    {
        public Context context;

        String JSonResult;

        List<Member> studentList;

        public GetHttpResponse(Context context)
        {
            this.context = context;
        }

       public ArrayList<Member> getStudentList(){
            return this.studentList;
       }

        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... arg0)
        {
            // Passing HTTP URL to HttpServicesClass Class.
            HttpServicesClass httpServicesClass = new HttpServicesClass(HttpUrl);
            try
            {
                httpServicesClass.ExecutePostRequest();

                if(httpServicesClass.getResponseCode() == 200)
                {
                    JSonResult = httpServicesClass.getResponse();

                    if(JSonResult != null)
                    {
                        JSONArray jsonArray = null;

                        try {
                            jsonArray = new JSONArray(JSonResult);

                            JSONObject jsonObject;
                            Member member;
                            studentList = new ArrayList<Member>();

                            for(int i=0; i<jsonArray.length(); i++)
                            {
                                member = new Member();
                                jsonObject = jsonArray.getJSONObject(i);

                                // Adding Student Id TO IdList Array.
                                IdList.add(jsonObject.getString("id").toString());
                                //Adding Student Name.
                                member.nama = jsonObject.getString("nama").toString();
                                //member.nrp = jsonObject.getString("nrp").toString();
                                studentList.add(member);
                            }
                        }
                        catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
                else
                {
                    Toast.makeText(context, httpServicesClass.getErrorMessage(), Toast.LENGTH_SHORT).show();
                }
            }
            catch (Exception e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result)
        {
            progressBar.setVisibility(View.GONE);
            StudentListView.setVisibility(View.VISIBLE);

            if(studentList != null) {
                ListAdapterClass adapter = new ListAdapterClass(studentList, context);
                StudentListView.setAdapter(adapter);
            }else
            {
                Toast.makeText(context, "Tidak ada data ditampilkan", Toast.LENGTH_SHORT).show();
            }

        }
    }