各行が 3 つの列と 3 つのボタンで構成されるListView
orを作成する必要があります。TableLayout
しかし、画面にはこのコントロールが含まれているだけでなく、テキストフィールドやその他のレイアウトが含まれているため、次のような形状を取るグリッドが必要です (たとえば)。
それを達成する方法とButton
クリックを処理する方法について何か考えはありますか? 私はAndroidが初めてなので、それを作成する方法がわかりません。
各行が 3 つの列と 3 つのボタンで構成されるListView
orを作成する必要があります。TableLayout
しかし、画面にはこのコントロールが含まれているだけでなく、テキストフィールドやその他のレイアウトが含まれているため、次のような形状を取るグリッドが必要です (たとえば)。
それを達成する方法とButton
クリックを処理する方法について何か考えはありますか? 私はAndroidが初めてなので、それを作成する方法がわかりません。
AListView
は主に変更可能なデータに使用されます。毎回同じ方法で表示でき、拡大/削除できるある種のデータがある場合は、ListView が適切なオプションです。
一方、静的データがある場合は、静的レイアウト (TableLayout、LinearLayout など) が適しています。それはすべて、所有しているデータとその使用方法によって異なります。
スマートフォンにはそのスペースがないため、そのスクリーンショットにあるのと同じ列を作成したくないことを願っています.
3 つの列が必要で、そのデータが変更可能であると仮定しましょう。
ルートに を含むcostum ListViewを使用できます。次に、挿入する各要素を で使用する必要があります。この組み合わせにより、行の各要素が同じ幅になることが保証されるため、オプションです。LinearLayout
android:orientation="horizontal
layout_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);
}
});
このようなアプリケーションを確認することをお勧めします。Android を初めて使用する場合は、いくつかのアプリケーション、チュートリアル、およびコントロールも参照してください。このアプリケーションの作成方法を誰も教えてくれません。それがバグか何かであった場合は、答えられるでしょう。しかし、あなたの質問は本当に広大です。アプリケーションの問題ではなく、アプリケーション全体を開発する方法です。いくつかのアプリケーションまたはこのリンクもご覧ください。アンドロイドを始めるのに役立つでしょう。
問題の完全な実装を提供します。最初に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;
}
}
最後に、メイン アクティビティでアダプターを作成し、アダプターのコンストラクターを呼び出して、このアダプターをリストビューに設定します。