2010-04-19 2 views
1

맨 위에 편집 텍스트와 버튼이 한 행에 있어야하는 방식으로 레이아웃을 만들고 싶습니다. 검색 텍스트 editext에 입력 한 검색 버튼을 클릭하십시오. 그런 다음 각 행에 이미지와 텍스트가 들어있는 사용자 정의 목록보기를 표시하려고합니다 (API 데모 예제 list14에 따라). 하지만 응용 프로그램을 실행하면 버튼과 edittext가 각 행에 추가됩니다 (즉, 각 행에는 이미지, 텍스트, editext, 버튼이 포함됨) 어떤 사람이이 문제를 해결하는 방법을 안내 할 수 있습니까?아이콘과 텍스트가있는 효율적인 어댑터에 Editext와 Button을 추가하는 방법

다음은 내 xml 파일입니다. :

<!-- 
    <FrameLayout android:layout_width="wrap_content" 
    android:layout_height="0dip" android:layout_weight="1"></FrameLayout> 
--> 
<ImageView android:id="@+id/icon" android:layout_width="48dip" 
    android:layout_height="48dip" /> 

<TextView android:id="@+id/text" android:layout_gravity="center_vertical" 
    android:layout_width="0dip" android:layout_weight="1.0" 
    android:layout_height="wrap_content" /> 


<!-- 
    <EditText android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:id="@+id/prdsearchtb" 
    android:text="@string/tb_prd_search_lbl"></EditText> 
--> 
<!-- 
    <TableLayout android:id="@+id/TableLayout01" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> <TableRow> 
--> 
<Button android:id="@+id/prdsrcbutton" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" android:text="@string/btn_lbl_prd_search" 
    android:layout_x="2px" android:layout_y="410px"></Button> 
<!-- </TableRow> 
</TableLayout> 

->

자바 파일 : /** * */ 패키지 org.techdata.activity;

,

import android.app.AlertDialog; import android.app.ListActivity; import android.content.Context; import android.content.Intent; android.graphics.Bitmap; android.graphics.BitmapFactory; import android.os.Bundle; 가져 오기 android.util.Log; 가져 오기 android.view.LayoutInflater; import android.view.View; 가져 오기 android.view.ViewGroup; 가져 오기 android.widget.BaseAdapter; 가져 오기 android.widget.Button; 가져 오기 android.widget.EditText; 가져 오기 android.widget.ImageView; 가져 오기 android.widget.ListView; 가져 오기 android.widget.TextView;

/** * @author jayanthg *이 */ 공용 클래스 상품 검색은 ListActivity를 확장 {

private static class ProductSearchAdapter extends BaseAdapter { 

    private LayoutInflater mInflater; 
    private Bitmap mIcon1; 
    private Bitmap mIcon2; 

    public ProductSearchAdapter(Context context) { 

     mInflater = LayoutInflater.from(context); 

     // Icons bound to the rows. 
     mIcon1 = BitmapFactory.decodeResource(context.getResources(), 
       R.drawable.icon48x48_1); 
     mIcon2 = BitmapFactory.decodeResource(context.getResources(), 
       R.drawable.icon48x48_2); 
    } 

    @Override 
    public int getCount() { 

     return DATA.length; 
    } 

    @Override 
    public Object getItem(int position) { 

     return position; 
    } 

    @Override 
    public long getItemId(int position) { 

     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     ViewHolder holder; 
     Button btn=null; 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.productsearch, null); 

      // Creates a ViewHolder and store references to the two children 
      // views 
      // we want to bind data to. 
      holder = new ViewHolder(); 
      holder.text = (TextView) convertView.findViewById(R.id.text); 
      holder.icon = (ImageView) convertView.findViewById(R.id.icon); 
      btn=(Button)convertView.findViewById(R.id.prdsrcbutton); 
      convertView.setTag(holder); 
     } else { 
      // Get the ViewHolder back to get fast access to the TextView 
      // and the ImageView. 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     // Bind the data efficiently with the holder. 
     holder.text.setText(DATA[position]); 
     holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); 

     holder.icon.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Log.i("image", " u clicked on icon Position" + position); 

      } 
     }); 
     holder.text.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Log.i("Text", " u clicked on text Position" + position); 

      } 
     }); 

     btn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Log.i("Button","U clicked on button"); 

      } 
     }); 


     return convertView; 
    } 

    static class ViewHolder { 
     TextView text; 
     ImageView icon; 
    } 

    private static final String[] DATA = { "Abbaye de Belloc", 
      "Abbaye du Mont des Cats" }; 

} 

ListView product_search_list; 
Button srch_btn; 
EditText srch_text; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setListAdapter(new ProductSearchAdapter(this)); 
    // setContentView(R.layout.productsearch); 
    // getListView().setEmptyView(findViewById(R.id.text)); 
    // srch_text = (EditText)findViewById(R.id.prdsearchtb); 
    // srch_btn = (Button) findViewById(R.id.prdsearchtb); 
    // srch_btn.setOnClickListener(new View.OnClickListener() { 
    //  
    // @Override 
    // public void onClick(View v) { 
    // callProductSearchAdapter(); 
    // 
    // } 
    // }); 

} 

void callProductSearchAdapter() { 
    setListAdapter(new ProductSearchAdapter(this)); 
} 

private void createDialog(String title, String text, final Intent i) { 
    if (i == null) { 
     AlertDialog ad = new AlertDialog.Builder(this).setIcon(
       R.drawable.alert_dialog_icon).setPositiveButton("Ok", null) 
       .setTitle(title).setMessage(text).create(); 
     ad.show(); 
    } 
} 

}

감사합니다 : Jayanth

답변

1

은 당신이하고있는 것은 개별 행에 대해 사용하는 레이아웃을 수정하므로 모든 행에 버튼이 나타납니다. 당신이해야 할 일은 버튼과 textviews를 사용하여 메인 레이아웃을위한 XML 파일을 생성하고, 그 안에 ListView를 중첩하는 것입니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <LinearLayout android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <TextView android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="Bla"/> 

     <EditText android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="Bla"/> 

    </LinearLayout> 

    <ListView android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 
</LinearLayout> 

그것은 목록보기의 ID가 위와 같이 정확하게 (@android:id/list)하는 것이 중요합니다 : 예를 들어,이 같은 main.xml에 파일을 만듭니다. 사용하지 않으면 사용자 정의 된 '효율적인 어댑터'가 해당 어댑터를 찾을 수 없습니다. 이 작업을 완료하면 super.onCreate (...) 행 바로 뒤에 onCreate 메소드에 setContentView(R.layout.main);을 추가하면됩니다.

+0

OP의 게시물에 대한 응답으로 : 이미 * ListView를 사용 중입니다. 이것이 바로'setListAdapter (new ProductSearchAdapter (this))'가하는 일입니다. 자동으로 작업하는 것입니다. 위 레이아웃은 목록 맨 위에 TextView 및 EditText를 표시하는 방법을 보여 주며 원하는 목록으로 작성할 수 있습니다. 목록 행은 이미지 및 텍스트 또는 기타 항목 일 수 있습니다. 이는 BaseAdapter의 getView로 팽창하는 개별 행에 대해 XML 파일에서 정의한 것입니다. –

관련 문제