私はソート用のボタンを持つ複数の値でカスタムリストビューを作成しようとしています。このように、リストビューは年、名前、価格などの異なる値でソートすることができます。Androidスタジオボタンを使用してカスタムリストビューを並べ替える
私はAndroidスタジオと一般的なコーディングでまだかなり新しいです。
問題は、いずれかのボタンを押すとソートされません。私は、数値的に昇順で並べ替えるために比較関数を使ってみましたが、それはうまくいかない(何もエラーを起こさず、何も起こりません)。ここで
は、最初に私のカスタム列を示す、私が試したもので、その後、カスタムリストアダプタ:
マイカスタム行レイアウト:
<TextView
android:layout_width="40dp"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
android:text="Time:"
android:id="@+id/time_label_row"
android:gravity="center"
android:layout_weight="1"/>
<TextView
android:layout_width="40dp"
android:layout_height="35dp"
android:text="time"
android:id="@+id/time_row"
android:gravity="center"
android:layout_weight="1"/>
<TextView
android:layout_width="40dp"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
android:text="Price:"
android:id="@+id/price_label_row"
android:gravity="center"
android:layout_weight="1"/>
<TextView
android:layout_width="40dp"
android:layout_height="35dp"
android:text="price"
android:id="@+id/price_row"
android:gravity="center"
android:layout_weight="1"/>
<TextView
android:layout_width="40dp"
android:layout_height="35dp"
android:layout_marginLeft="10dp"
android:text="Year:"
android:id="@+id/year_label_row"
android:gravity="center"
android:layout_weight="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="35dp"
android:text="year"
android:id="@+id/year_row"
android:gravity="center"
android:layout_weight="1"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimaryDark"
/>
私のカスタムリストビューここinsteresting(ボタンのみ):
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="50dp">
<Button
android:text="Time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sort_time"
android:layout_weight="1"
android:onClick="TimeSortClick"/>
<Button
android:text="Price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sort_price"
android:layout_weight="1"
android:onClick="PriceSortClick"/>
<Button
android:text="Year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sort_year"
android:layout_weight="1"
android:onClick="YearSortClick"/>
</LinearLayout>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/list_view"
android:smoothScrollbar="true"/>
マイカスタムアダプタ:
public class CustomAdapter extends BaseAdapter {
String [] result1;
String [] result2;
String [] result3;
Context context;
private static LayoutInflater inflater=null;
public CustomAdapter(ListViewActivity mainActivity, String[] priceOrderList, String [] timeOrderList, String [] yearOrderList) {
// TODO Auto-generated constructor stub
result1=priceOrderList;
result2=timeOrderList;
result3=yearOrderList;
context=mainActivity;
inflater = (LayoutInflater)context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return result1.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public class Holder
{
TextView tv;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder=new Holder();
View rowView;
rowView = inflater.inflate(R.layout.row_layout, null);
holder.tv=(TextView) rowView.findViewById(R.id.price_row);
holder.tv.setText(result1[position]);
holder.tv=(TextView) rowView.findViewById(R.id.time_row);
holder.tv.setText(result2[position]);
holder.tv=(TextView) rowView.findViewById(R.id.year_row);
holder.tv.setText(result3[position]);
rowView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context, "You Clicked "+result1[position], Toast.LENGTH_LONG).show();
}
});
return rowView;
}
私の(私は私のカスタムリストビューを膨らままたは活性)のListView Activitiy:とにかく
public class ListViewActivity extends Activity implements View.OnClickListener {
ListView view_list;
Context context;
ArrayList priceOrder;
public static String [] priceOrderList={"50$","100$","120$","40$"};
public static String [] timeOrderList={"10min","12min","5min","4min"};
public static String [] yearOrderList={"2010","2011","2012","2004"};
private Button mTimeButton;
private Button mPriceButton;
private Button mYearButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
context=this;
mTimeButton = (Button) findViewById(R.id.sort_time);
mPriceButton = (Button) findViewById(R.id.sort_price);
mYearButton = (Button) findViewById(R.id.sort_year);
view_list = (ListView) findViewById(R.id.list_view);
view_list.setAdapter(new CustomAdapter(this, priceOrderList, timeOrderList, yearOrderList));
mTimeButton.setOnClickListener(this);
mPriceButton.setOnClickListener(this);
mYearButton.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
if (v == mPriceButton){
String pricesort = ("Sorting for Price");
Toast.makeText(ListViewActivity.this, pricesort, Toast.LENGTH_SHORT).show();
Comparator<String> StringAscComparator = new Comparator<String>() {
public int compare(String app1, String app2) {
String stringName1 = app1;
String stringName2 = app2;
return stringName1.compareToIgnoreCase(stringName2);
}
};
Collections.sort(Arrays.asList(priceOrderList), StringAscComparator);
} else if (v == mTimeButton){
String timesort = ("Sorting for Time");
Toast.makeText(ListViewActivity.this, timesort, Toast.LENGTH_SHORT).show();
Comparator<String> StringAscComparator = new Comparator<String>() {
public int compare(String app1, String app2) {
String stringName1 = app1;
String stringName2 = app2;
return stringName1.compareToIgnoreCase(stringName2);
}
};
Collections.sort(Arrays.asList(timeOrderList), StringAscComparator);
} else if (v == mYearButton){
String yearsort = ("Sorting for Year");
Toast.makeText(ListViewActivity.this, yearsort, Toast.LENGTH_SHORT).show();
Comparator<String> StringAscComparator = new Comparator<String>() {
public int compare(String app1, String app2) {
String stringName1 = app1;
String stringName2 = app2;
return stringName1.compareToIgnoreCase(stringName2);
}
};
Collections.sort(Arrays.asList(yearOrderList), StringAscComparator);
}
}
、助けてくれてありがとう!大変感謝しています!
POJOの1つの配列は明らかに3つの配列を使用しています。(たとえあなたが間違った項目を取得してもアダプタに通知しても)(priceOrderはyearOrderに収まらない)... [別の問題は文字列と数値の順序です] http://ideone.com/lWQPg5)... – Selvin
データの意味を少し良く理解してください。価格は時間と年に関連付けられているため、価格/時間/年が何らかのエンティティを構成していますか?そして、異なるフィールドのそれぞれでエンティティを並べ替えるだけですか?私はあなたがリスト項目の各フィールドの1つを持って参照してください...または単にあなたの価格を表示する時間を表示すると言うからリストを変更していますか? –
@Selvinは、私が試したようなリストビューを作る別の方法があります。そこでは、3つの値すべてを並べ替えることができますか?私は私のアプローチが間違っていて理にかなっていませんが、それを行うには別の方法が必要ですか? :) –