列表视图中的复选框在使列表项可点击后停止显示&添加搜索功能

时间:2014-09-21 17:33:50

标签: android listview checkbox

我目前正在开发一款具有ListView和复选框(伪装成最喜欢的星形图标)的应用,并计划在修复一些问题后使用SharedPreferences。当我搞乱CustomAdapter和我的主要活动中使用的另一个ArrayAdapter时,我的主要问题就出现了。我的应用程序没有崩溃,但输出很奇怪,请看看:

以下是您可能会考虑的一些重要代码:

主要活动:

public class MyActivity extends Activity {

private ListView myListView;
ArrayAdapter<Model> myAdapter;
EditText inputSearch;
Model[] modelItems;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    // BackButton
    Button SignBackButton = (Button) findViewById(R.id.btnsignageback);
    SignBackButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            finish();
        }
    });


    myListView = (ListView) findViewById(R.id.listViewtrial);

    modelItems = new Model[5];
    modelItems[0] = new Model("pizza", 0);
    modelItems[1] = new Model("burger", 1);
    modelItems[2] = new Model("olives", 1);
    modelItems[3] = new Model("orange", 0);
    modelItems[4] = new Model("tomato", 1);


    //////UNSOLVED PART
    CustomAdapter adapter = new CustomAdapter(this, modelItems);
    myListView.setAdapter(adapter);

    //Type entry in search textview
    inputSearch = (EditText) findViewById(R.id.editTextillus);
    //////UNSOLVED PART(Conflicting codes with the CustomAdapter?)
    myAdapter = new ArrayAdapter<Model>(this, R.layout.search, R.id.product_name, modelItems);
    myListView.setAdapter(myAdapter);

    //Filter search results
    inputSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            MyActivity.this.myAdapter.getFilter().filter(cs);
        }
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
        }
        @Override
        public void afterTextChanged(Editable arg0) {
        }
    });

    //List view for new intent?
    //Redirect listitem in new activity

    myListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {

        @Override
        public void onItemClick(AdapterView<?> parent, View item,
                                int position, long id)

        {
            String name = myListView.getItemAtPosition(position).toString();
            for (int i = 0; i < myAdapter.getCount(); i++)
            {
                if (name.equals(modelItems[i]))
                {
                    position = i;
                    break;
                }
            }

            if (position == 0) {
                Intent int0 = new Intent(getApplicationContext(), secondactivity.class);
                startActivity(int0);
            }

            else if (position == 1) {
                Intent int1 = new Intent(getApplicationContext(), secondactivity.class);
                startActivity(int1);
            }
            else if (position == 2) {
                Intent int2 = new Intent(getApplicationContext(), secondactivity.class);
                startActivity(int2);
                }
            }
        });

    }
}

模特课:

 public class Model{
 String name;
 int value; 

 Model(String name, int value){
    this.name = name;
    this.value = value;
 }
 public String getName(){
    return this.name;
 }
 public int getValue(){
    return this.value;
 }

}

CursorAdaptor类:

public class CustomAdapter extends ArrayAdapter<Model>{

Model[] modelItems = null;
Context context;

public CustomAdapter(Context context, Model[] resource) {
    super(context,R.layout.row,resource);
    // TODO Auto-generated constructor stub
    this.context = context;
    this.modelItems = resource;

}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    LayoutInflater inflater = ((Activity)context).getLayoutInflater();
    convertView = inflater.inflate(R.layout.row, parent, false);
    TextView name = (TextView) convertView.findViewById(R.id.textView1);
    CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1);
    name.setText(modelItems[position].getName());
    if(modelItems[position].getValue() == 1)
        cb.setChecked(true);
    else
        cb.setChecked(false);
    return convertView;
    }



}

我的搜索XML:                  

<TextView android:id="@+id/product_name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:textSize="16dip"
    android:textStyle="bold"/>

</LinearLayout>

我的行XML:

    <CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""`enter code here`
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:button="@drawable/check"/>
    <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView" />
 </LinearLayout>

结果是一个不正确的字符串值数组(因为它没有显示我创建的那个),它看起来像这样:

(模型是我的getter setter类)

com.example.xxx.activity.Model@41eecd31
com.example.xxx.activity.Model@41eecd32
com.example.xxx.activity.Model@41eecd34
com.example.xxx.activity.Model@41eecd38
com.example.xxx.activity.Model@41eecd42

而不是

比萨饼 汉堡包 橄榄 橙子 番茄

复选框已消失。如果有人可以帮我解决我的复选框的消失以及我的列表项中的奇怪显示,我将非常感激。谢谢。

1 个答案:

答案 0 :(得分:0)

我看看&#34;检查&#34; drawable(@ drawable / check)

另外, getName() 方法会返回那个奇怪的值(com.example.xxx.activity.Model@41eecd31) 向我们展示Model类的代码。