-2

各行が 3 つの列と 3 つのボタンで構成されるListVieworを作成する必要があります。TableLayout

ここに画像の説明を入力

しかし、画面にはこのコントロールが含まれているだけでなく、テキストフィールドやその他のレイアウトが含まれているため、次のような形状を取るグリッドが必要です (たとえば)。

それを達成する方法とButtonクリックを処理する方法について何か考えはありますか? 私はAndroidが初めてなので、それを作成する方法がわかりません。

ここに画像の説明を入力

4

3 に答える 3

7

AListViewは主に変更可能なデータに使用されます。毎回同じ方法で表示でき、拡大/削除できるある種のデータがある場合は、ListView が適切なオプションです。

一方、静的データがある場合は、静的レイアウト (TableLayout、LinearLayout など) が適しています。それはすべて、所有しているデータとその使用方法によって異なります。

スマートフォンにはそのスペースがないため、そのスクリーンショットにあるのと同じ列を作成したくないことを願っています.

3 つの列が必要で、そのデータが変更可能であると仮定しましょう。

ルートに を含むcostum ListViewを使用できます。次に、挿入する各要素を で使用する必要があります。この組み合わせにより、行の各要素が同じ幅になることが保証されるため、オプションです。LinearLayoutandroid:orientation="horizontallayout_weight="1"android:layout_width="0dp"ListView

コスチューム リストの行は次のようになります。

<LinearLayout
    android:layout_width="fill_parent"
    ...
    android:orientation="horizontal" >
<TextView
   android:layout_width="0dp"
   ...
   android:layout_weight="1" />
...

ボタンのクリックを処理するには、costum ListView のアダプター内setOnClickListenerのメソッドでボタンを取得するときに、ボタンでa を実行する必要があります。getView

そうすると、ボタンと ListView をクリックする際に問題が発生する可能性があります。これを解決する一般的な方法は、ボタンandroid:focusable="false"を宣言するxmlに配置することです。しかし、一度に 1 つのこと ;)

編集(コメントのため:ボタンを無効/有効にするチェックボックスを追加する):

ボタンを無効/有効にするチェックボックスが必要な場合getViewは、costum ListView のアダプターでいくつかの作業を行う必要があります。

必要がある:

  • 次のようなものを使用してチェックボックスを取得します。CheckBox myCheckBox = (CheckBox) inflater.findViewById(R.id.checkboxid)インフレータは getView で定義したもので、checkboxid は xml 行で定義した ID です。
  • チェックボックスリスナーでアクセスできるようにボタンを保存します。myCheckBox.setTag(button)ここで、ボタンは有効/無効にするボタンであり、myCheckBox を取得したのと同じ方法で取得できます
  • setOnCheckedChangeListenerチェックボックスの状態に応じてボタンの可視性を変更するチェックボックスに を設定します。

最後の箇条書きは次のようになります。

myCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        Button myButton = (Button) buttonView.getTag();

        if ( isChecked ) 
            myButton.setVisibility(View.VISIBLE);
        else
            // Use GONE if you want to get that space for other views
            myButton.setVisibility(View.GONE); 

    }
});
于 2012-05-14T08:47:28.173 に答える
1

このようなアプリケーションを確認することをお勧めします。Android を初めて使用する場合は、いくつかのアプリケーション、チュートリアル、およびコントロールも参照してください。このアプリケーションの作成方法を誰も教えてくれません。それがバグか何かであった場合は、答えられるでしょう。しかし、あなたの質問は本当に広大です。アプリケーションの問題ではなく、アプリケーション全体を開発する方法です。いくつかのアプリケーションまたはこのリンクもご覧ください。アンドロイドを始めるのに役立つでしょう。

于 2012-05-12T07:26:15.467 に答える
0

問題の完全な実装を提供します。最初にxmlでリストビューを作成します

ファイル名:Yourlist.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearlayout_id"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" 
        android:background="@color/encode_view">

    <ListView
        android:id="@+id/info_list_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_above="@+id/cancelinfobtn_id" >
    </ListView>

    </RelativeLayout>

その後、このような 1 つのテキスト ボックスと 1 つのボタンでもう 1 つの xml を作成します。

ファイル名=youCustomlayout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            />

    </RelativeLayout>

このようなカスタムリストを1つ作成します

    package com.menu.in;

    import java.util.ArrayList;

    import com.daffodilsw.client.android.R;



    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.SectionIndexer;
    import android.widget.TextView;

    public class MyContactAdapter extends ArrayAdapter {
    ArrayList<String> userContact_List,userheading_list;
    private Context mcontext;   
    private View rowview;
    LayoutInflater inflater;
    public static ArrayList<Boolean > itemchecked=new ArrayList<Boolean>();
    public MyContactAdapter(Context context, ArrayList< String> usercontactheading_list,ArrayList<String> usercontactheading_list ) {
        super(context,R.layout.yourcustomlayout,usercontactheading_list);


        userheading_list=new ArrayList<String>();

        userheading_list=usercontactheading_list;
        mcontext=context;
         inflater = (LayoutInflater) mcontext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

        public View getView(final int position, View convertView, ViewGroup parent) {
             rowview=convertView;
            if(convertView==null)
            {
                rowview = inflater.inflate(R.layout.detail_value_layout, parent, false);
            }

            TextView textView_heading = (TextView) rowview.findViewById(R.id.textView1);

            Button btn=(Button) rowview.findbyviewid(R.id.Button1);

            checkbox_detail.setOnClickListener(new OnClickListener() {
            textView_heading.setText(userheading_list.get(position));

          return rowview;
        }   


                }

最後に、メイン アクティビティでアダプターを作成し、アダプターのコンストラクターを呼び出して、このアダプターをリストビューに設定します。

于 2012-05-19T11:24:56.357 に答える