RecyclerView数据最后一行显示多次

时间:2017-08-12 18:37:08

标签: android android-recyclerview

我不明白为什么我的recyclerview只显示我的数据库的最后一行,尽管我用150个数据初始化它。 我在互联网上搜索了很多,甚至在这里搜索过,但没有一个解决方案正在运行。你能帮我弄清楚为什么我的recyclerView只显示数据库的最后一行吗?在此先感谢你们所有人。

可能你可以帮助我。这是我的代码:

package com.example.frontaddress.matedesignc;
        import android.database.Cursor;
        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        import android.support.v7.widget.LinearLayoutManager;
        import android.support.v7.widget.RecyclerView;
        import android.support.v7.widget.Toolbar;
        import android.view.Menu;
        import android.view.MenuItem;
        import android.view.View;
        import android.widget.AdapterView;
        import android.widget.ArrayAdapter;
        import android.widget.Spinner;
        import android.widget.Toast;
        import java.io.IOException;
        import java.util.ArrayList;
        import java.util.List;
public class Customer_Activity extends AppCompatActivity {

    private List<String> StateListArray =new ArrayList<String>();
    private List<String> StateList =new ArrayList<String>();
    private List<String> CityListArray ;
    private List<String> CityList ;
    private Spinner dropdown_state;
    private Spinner dropdown_city;
    private DBHandler DB = new DBHandler(this);
    private static final String BUSINESSNAME = "bussiness_name";
    private static final String MOBILE = "mobile";
    private static final String ADDRESS = "address";
    private static final String ID = "id";
    private Toolbar toolbar;
    private Customer_list_Adapter adapter;
    private RecyclerView recyclerView_Customer;
    //ProgressDialog pDialog = new ProgressDialog(this);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_customer_list);
        toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        GetStateList();    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_sub, menu);
        return true;    }
    public void CustomerDetails(String state,String city) throws IOException {


    try {
    List<customer_search_information> data = null;
    data = new ArrayList<>();
    customer_search_information current = new customer_search_information();
    Cursor RST_CSTInfo = DB.getRows("customer", "id,bussiness_name,mobile,address", " state='" + state + "' AND city='" + city + "'");

    while (!RST_CSTInfo.isAfterLast()) {

        current.bussiness_name = RST_CSTInfo.getString(RST_CSTInfo.getColumnIndex(BUSINESSNAME));
        current.state = state;
        current.city = city;
        current.address = RST_CSTInfo.getString(RST_CSTInfo.getColumnIndex(ADDRESS));
        String Mob = RST_CSTInfo.getString(RST_CSTInfo.getColumnIndex(MOBILE));
        current.mobile_no = Mob;

        current.e_mail = "mail.isigntech@gmail.com";
        current.id = RST_CSTInfo.getString(RST_CSTInfo.getColumnIndex(ID));
        // displayExceptionMessage(current.id+current.bussiness_name+current.state+current.city+current.address+current.mobile+current.email);

        data.add(current);
        RST_CSTInfo.moveToNext();

    }


        recyclerView_Customer = (RecyclerView) findViewById(R.id.drawerListCustomer);
        recyclerView_Customer.setHasFixedSize(true);
        recyclerView_Customer.setHasFixedSize(true);
        recyclerView_Customer.setLayoutManager(new LinearLayoutManager(this));
        adapter = new Customer_list_Adapter(this, data);
        recyclerView_Customer.setAdapter(adapter);


}catch (Exception e){ displayExceptionMessage(e.toString());}

    }
private void GetStateList()
{  Cursor Customer= DB.getRows("customer","state", " 1 GROUP BY state");
    while(!Customer.isAfterLast()){
        String state=Customer.getString(Customer.getColumnIndex("state"));
        StateList.add(state);
        StateListArray.add(state);
        Customer.moveToNext();
    }
    dropdown_state = (Spinner)findViewById(R.id.SpnSrch_State);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(Customer_Activity.this, android.R.layout.simple_spinner_dropdown_item, StateListArray);
    dropdown_state.setAdapter(adapter);
    dropdown_state.setPrompt("Choose State ");
    dropdown_state.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            int item = dropdown_state.getSelectedItemPosition();
            String state =StateListArray.get(item);
            dropdown_city=(Spinner) findViewById(R.id.SpnSrch_State);
            Cursor RstCity= DB.getRows("customer","city", "state='"+state+"' GROUP BY city");
            CityListArray =new ArrayList<String>();
            CityList =new ArrayList<String>();
            while(!RstCity.isAfterLast()){

                String city=RstCity.getString(RstCity.getColumnIndex("city"));
                CityList.add(city);
                CityListArray.add(city);
                RstCity.moveToNext();
            }
            dropdown_city = (Spinner)findViewById(R.id.SpnSrch_City);
            ArrayAdapter<String> cityadapter = new ArrayAdapter<String>(Customer_Activity.this, android.R.layout.simple_spinner_dropdown_item, CityListArray);
            dropdown_city.setAdapter(cityadapter);
            dropdown_city.setPrompt("Choose City ");
            dropdown_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {

                    int item = dropdown_state.getSelectedItemPosition();
                    String state =StateListArray.get(item);
                    item = dropdown_city.getSelectedItemPosition();
                    String city =CityListArray.get(item);

                    try {
                        CustomerDetails(state,city);
                    } catch (Exception e) {
                        displayExceptionMessage(e.toString());
                        e.printStackTrace();
                    }
                }
                @Override
                public void onNothingSelected(AdapterView<?> parentView) {
                    displayExceptionMessage("Please Select State.");
                }
            });
        }
        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            displayExceptionMessage("Please Select City.");
        }
    });
}

    public void displayExceptionMessage(String msg) {
        //TextView Txterror=(TextView) findViewById(R.id.txterror);
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        if (id == android.R.id.home) {

            //  NavUtils.navigateUpFromSameTask(this);
        }

        return super.onOptionsItementer code hereSelected(item);
    }

}

这是我的自定义列表适配器代码:

package com.example.frontaddress.matedesignc;

        import android.Manifest;
        import android.content.Context;
        import android.content.Intent;
        import android.content.pm.PackageManager;
        import android.content.pm.ResolveInfo;
        import android.net.Uri;
        import android.support.v4.app.ActivityCompat;
        import android.support.v7.widget.RecyclerView;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.ImageView;
        import android.widget.TextView;
        import android.widget.Toast;
        import java.util.Collections;
        import java.util.List;
/**
 * Created by frontaddress on 10/08/17.
 */
public class Customer_list_Adapter extends RecyclerView.Adapter<Customer_list_Adapter.CustomerViewHolder> {
    private LayoutInflater inflater;
    private Context contexts;
    List<customer_search_information> Cst_data = Collections.emptyList();

    public Customer_list_Adapter(Context context, List<customer_search_information> data) {
        inflater = LayoutInflater.from(context);
        this.Cst_data = data;
        // Toast.makeText(contexts, data.size(), Toast.LENGTH_LONG).show();
        this.contexts = context;
    }

    @Override
    public CustomerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.content_search_staff, parent, false);
        CustomerViewHolder holder = new CustomerViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(CustomerViewHolder holder, int position) {
    try {
    customer_search_information current = Cst_data.get(position);
        Integer  Pos=position;


    holder.TxtBisinessName.setText(current.bussiness_name);
    holder.TxtAddress.setText(current.address);
    holder.Statecity.setText(current.state + "-" + current.city);
    holder.Txt_Mobile.setText(current.mobile_no.toString());
    holder.TxtEmail.setText(current.e_mail);
    }catch (Exception e)
    {
        Toast.makeText(contexts,e.toString(),Toast.LENGTH_SHORT).show();
     e.printStackTrace();
    }
}
    @Override
    public int getItemCount() {



        return Cst_data.size();
    }
    class CustomerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView TxtBisinessName;
        TextView TxtAddress;
        TextView Txt_Mobile;
        TextView Statecity;
        TextView TxtEmail;
        ImageView ImgPhoneCall,ImgMailTo;
        public CustomerViewHolder(View itemView) {
            super(itemView);
            TxtBisinessName = (TextView) itemView.findViewById(R.id.Txtbusiness_name);
            Txt_Mobile = (TextView) itemView.findViewById(R.id.TxtMobile);
            Statecity = (TextView) itemView.findViewById(R.id.Txtstatecity);
            TxtAddress = (TextView) itemView.findViewById(R.id.Txtaddress);
            TxtEmail=(TextView) itemView.findViewById(R.id.TxtEmail);
            ImgPhoneCall = (ImageView) itemView.findViewById(R.id.ImgCallPhone);
            ImgMailTo= (ImageView) itemView.findViewById(R.id.Imgmail);



            ImgPhoneCall.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    customer_search_information current = Cst_data.get(getPosition());
                    String  MOBILE = current.mobile_no;
                    try {

                        if (ActivityCompat.checkSelfPermission(contexts,Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED)
                         {
                            Toast.makeText(contexts, "Call Permission Not Granted ", Toast.LENGTH_LONG).show();

                            return;
                        }
                        Intent callIntent = new Intent(Intent.ACTION_DIAL);
                        callIntent.setData(Uri.parse("tel:+91" + MOBILE));
                        callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        contexts.startActivity(callIntent);

                    }

                    catch (Exception e){
                        Toast.makeText(contexts,e.toString(),Toast.LENGTH_SHORT).show();
                        e.printStackTrace();
                    }
                }

            });
           /*  TxtProfile.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    customer_search_information current = data.get(getPosition());
                    String SID = current.id;
                    Intent intent = new Intent(contexts, StudentProfileActivity.class);
                    intent.putExtra("id", SID);
                    contexts.startActivity(intent);
                }

            });*/

            ImgMailTo.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    try {
                        // TODO Auto-generated method stub
                        customer_search_information current = Cst_data.get(getPosition());
                        String EMAIL = current.e_mail;
                        String BName = current.bussiness_name;
                        Intent emailIntent = new Intent(Intent.ACTION_SEND);
                        emailIntent.putExtra(Intent.EXTRA_EMAIL, EMAIL);
                        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "");
                        emailIntent.setType("text/plain");
                        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hi,"+BName);
                        final PackageManager pm = contexts.getPackageManager();
                        final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
                        ResolveInfo best = null;
                        for (final ResolveInfo info : matches)
                            if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
                                best = info;
                        if (best != null)
                            emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
                        contexts.startActivity(emailIntent);
                    }
                    catch (Exception e){   }
                }

            });
        }

        @Override
        public void onClick(View v) {
            int ID=v.getId();
            customer_search_information current=Cst_data.get(getPosition());
            String SID=current.id;
            // Toast.makeText(contexts,"Item Clicked Profile: "+ v.getId(), Toast.LENGTH_SHORT).show();
          //  Intent intent = new Intent(contexts, StudentProfileActivity.class);
           // intent.putExtra("id", SID);
           // contexts.startActivity(intent);


        }



    }

}

1 个答案:

答案 0 :(得分:0)

我认为问题出在这里,而不是

while(!RST_CSTInfo.isAfterLast()){

...
..

RST_CSTInfo.moveToNext();
}

试试这个......

do(RST_CSTInfo.movetofirst()){

// your logic

}while(cursor.movetonext())