0

私の問題は次のとおりです: このArrayListsを使用して、データベースから 2 (名前と番号) を取得し、そのデータをリストのテキストビューに出力するリストビュー用のカスタムアダプターを作成しようとしました。データはリストに表示されますが、個別に表示されます。つまり、名前が番号で表示され、2 つがリストの 1 つのエントリとして一緒に表示されるのではなく、個別にクリックできます。必要なコードを添付します。

私のアダプタークラス:

public class ListViewCustomAdapter extends BaseAdapter {  

    public Activity context;  
    public LayoutInflater inflater; 
    ArrayList<String> names = new ArrayList<String>();
    ArrayList<String> nos = new ArrayList<String>();


    public ListViewCustomAdapter(Activity context,ArrayList<String> names, ArrayList<String> nos) {  
        super();  

        this.context = context;  
        this.names = names;
        this.nos=nos;

        this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
    }
    public int getCount() {  
        // TODO Auto-generated method stub  
        return names.size();  
    }  

    public Object getItem(int position) {  
        // TODO Auto-generated method stub  
        return null;  
    }  

    public long getItemId(int position) {  
        // TODO Auto-generated method stub  
        return 0;  
    }  

    public static class ViewHolder  
    {  
        TextView txtViewName;  
        TextView txtViewNo;  
    }  
    public View getView(int position, View convertView, ViewGroup parent) {  
        // TODO Auto-generated method stub  

        ViewHolder holder;  
        if(convertView==null)  
        {  
            holder = new ViewHolder();  
            convertView = inflater.inflate(R.layout.editlist, null);  

           // holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo);  
            holder.txtViewName = (TextView) convertView.findViewById(R.id.textView1);  
            holder.txtViewNo = (TextView) convertView.findViewById(R.id.textView2);  

            convertView.setTag(holder);  
        }  
        else  
            holder=(ViewHolder)convertView.getTag();  

        //holder.imgViewLogo.setImageResource(R.drawable.icon);  
        holder.txtViewName.setText(names.get(position));  
        holder.txtViewNo.setText(nos.get(position));  

        return convertView;  
    }   


}

リストビュー xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  
    android:id="@+id/relativeLayout1"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:padding="5dip">  


    <TextView  
        android:textAppearance="?android:attr/textAppearanceLarge"  
        android:layout_height="wrap_content"  
        android:text="TextView"  
        android:layout_width="wrap_content"  
        android:id="@+id/textView1"   
        android:layout_marginLeft="2dip">  
    </TextView>  

    <TextView  
        android:layout_height="wrap_content"  
        android:text="TextView"  
        android:layout_width="wrap_content"  
        android:id="@+id/textView2"  
        android:layout_toRightOf="@+id/textView1"   
        android:layout_marginLeft="2dip">  
    </TextView>    

</RelativeLayout>  

アダプタを使用する主なアクティビティ:

public class EditActivity extends ListActivity implements OnClickListener, OnItemClickListener{
    Button b_add;
    ListView lv;
    SQLUtils sqlUtils = new SQLUtils(this);
     ListViewCustomAdapter adapter; 
     ArrayList<String> names = new ArrayList<String>();
        ArrayList<String> nos = new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.edit_layout);

         b_add = (Button)findViewById(R.id.b_add);
         b_add.setOnClickListener(this);
         lv = (ListView)findViewById(android.R.id.list);
         names=sqlUtils.getActions(1);
         nos=sqlUtils.getActions(2);

         //lv.setOnItemClickListener(this);
         adapter = new ListViewCustomAdapter(this, names, nos);  
            lv.setAdapter(adapter); 
    }
[1]
4

2 に答える 2

0

アダプタの各アイテムに2つのTextViewを保持させる場合は、ViewHolderクラスでLinearLayoutを拡張し、垂直に設定します。または、独自のクラス/linearlayoutの代わりに1つのTextViewを使用し、それを複数行にして、テキストをname + "\ n"+numberに設定することもできます。

于 2012-05-01T15:00:48.380 に答える
0

私はあなたの質問に混乱していますが、チュートリアルとあなたのコードの違いを見て、盲目的に推測します.

例のように、通常のアクティビティではなく ListActivity を拡張します。ListActivity の場合、次のように onListItemClick リスナーを定義します。

public void onListItemClick(AdapterView<?> parent, View view, int position, long id) {
    String title = ((TextView) view.findViewById(R.id.textView1)).getText().toString();
    String description = ((TextView) view.findViewById(R.id.textView2)).getText().toString();
    Toast.makeText(this, "Title => " + title + " => n Description " + description, Toast.LENGTH_SHORT).show();
}
于 2012-04-30T16:25:44.190 に答える