2016-12-14 34 views
5

Czy mogę wiedzieć, dlaczego mój niestandardowy adapter listview wygląda tak?Custom ListView Adapter Android

Obrazek:

enter image description here

Kody:

MainActivity.java

public class MainActivity extends AppCompatActivity { 

CurrencyRatesDetails crd = new CurrencyRatesDetails(); 

TextView inputCurrTV, convertedAmtTV; 
ListView currencyLV; 
EditText inputAmtET; 
ArrayAdapter<String> adapter; 
String[] currNameArr = crd.getNames(); 
String[] currCodeArr = crd.getCodes(); 
String[] currRateArr = crd.getRates(); 

Context context; 

int index = 0; 

//String[] rateCurrArr = {"AUD", "BGN", "BRL", "CAD", "CHF", "CNY"}; 
//double[] rateArr = {0.944, 1.2824, 2.2842, 0.96158, 0.70946, 4.8624} 
Menu myMenu = null; 

double rate, amtInput, finalConversion; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    context = this; 

    inputAmtET = (EditText) findViewById(R.id.inputAmtET); 
    convertedAmtTV = (TextView) findViewById(R.id.convertedAmtTV); 
    inputCurrTV = (TextView) findViewById(R.id.inputCurrTV); 
    currencyLV = (ListView) findViewById(R.id.currencyLV); 

    //Resources myRes = this.getResources(); 
    //currArr = myRes.getStringArray(R.array.currencyList); 
    //adapter = ArrayAdapter.createFromResource(this, R.array.currencyList, android.R.layout.simple_selectable_list_item); 
    //adapter = new ArrayAdapter<String>(this, android.R.layout.simple_selectable_list_item, currNameArr); 
    //currencyLV.setAdapter(adapter); 

    currencyLV.setAdapter(new CustomAdapterLV(this, currNameArr, currCodeArr, currRateArr)); 

    currencyLV.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

      inputCurrTV.setText(currCodeArr[i]); 

      index = i; 

      //Getting rate based on selected currency code 
      //rate = rateArr[i]; 

     } 
    }); 
} 

public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    this.myMenu = menu; 
    addMenuItems(menu); 

    getMenuInflater().inflate(R.menu.mainmenu, menu); 
    return true; 
} 

private void addMenuItems(Menu menu) { 
    int index = 200; 
    menu.add(index, index, index, "Settings"); 
    menu.add(index, index + 1, index + 1, "Add Custom Rate"); 
    menu.add(index, index + 2, index + 2, "Load Default Rates"); 
} 

public boolean onOptionsItemSelected(MenuItem item) { 

    //getOrder() to get Menu Item at this specific orderId 
    if (item.getOrder() == 123) { 

     amtInput = Double.parseDouble(inputAmtET.getText().toString()); 

     //finalConversion = amtInput/rate; 

     finalConversion = crd.conversion(amtInput, index); 

     //Formatting converted value to 2d.p 
     String finalValue = String.format("%.2f", finalConversion); 

     convertedAmtTV.setText(finalValue); 

    } else if (item.getItemId() == 201) { 

     Intent myIntent = new Intent(MainActivity.this, CustomXchangeRate.class); 
     startActivity(myIntent); 

    } 

    return true; 
} 

klienta Adapter LV layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_custom_lvadapter" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:weightSum="1" 
android:orientation="vertical"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0.0dp" 
    android:weightSum="1" 
    android:layout_weight="0.13" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.7" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/currencyNameTV" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="15dp" 
      android:text="text"/> 

     <TextView 
      android:id="@+id/currencyCodeTV" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="15px" 
      android:textSize="18dp" 
      android:text="text"/> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0.0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.3" 
     android:orientation="vertical" 
     android:layout_gravity="center_horizontal" > 

     <TextView 
      android:id="@+id/currencyRateTV" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:text="text" 
      android:textSize="30dp" 
      android:layout_marginLeft="15px" 
      android:layout_marginTop="15px" 
      android:gravity="center_horizontal" /> 

    </LinearLayout> 

</LinearLayout> 

klienta LV Adapter Class.java

public class CustomAdapterLV extends BaseAdapter{ 

String[] resultNames; 
String[] resultCodes; 
String[] resultRates; 

Context context; 

private static LayoutInflater inflater = null; 

public CustomAdapterLV(MainActivity mainActivity, String[] names,   String[]codes, String[] rates) { 
    resultNames = names; 
    resultCodes = codes; 
    resultRates = rates; 

    context = mainActivity; 

    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

} 

@Override 
public int getCount() { 
    return resultNames.length; 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

public class ViewHolder{ 
    TextView tvName; 
    TextView tvCode; 
    TextView tvRate; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    ViewHolder vh = new ViewHolder(); 
    View rowView; 

    rowView = inflater.inflate(R.layout.activity_custom_lvadapter, null); 

    vh.tvName = (TextView) rowView.findViewById(R.id.currencyNameTV); 
    vh.tvCode = (TextView) rowView.findViewById(R.id.currencyCodeTV); 
    vh.tvRate = (TextView) rowView.findViewById(R.id.currencyRateTV); 

    vh.tvName.setText(resultNames[position]); 
    vh.tvCode.setText(resultCodes[position]); 
    vh.tvRate.setText(resultRates[position]); 

    return rowView; 

} 

currNameArr, currCodeArr, currRateArr są ustalony w innej klasy, nie mogę wydawać się, aby dodać go w.

Dzięki chłopaki ..

+1

Wygląda jak problem projektowania, prawda wygląda tak samo w okno podglądu? –

+1

Tak, to jest to, co mam, gdy uruchomię mój activity_main.xml – domster

Odpowiedz

1

Próbuję, a ja nie mam edytora, więc proszę o opinię.

Spróbuj użyć tego układu: Twój TextView jest mniejsza niż wysokość tekstu prawdopodobnie

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_custom_lvadapter" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 

android:orientation="vertical"> 
<!-- I removed the weightsum because this linearlayout is containing only a single item. If you have more items tell me and I will edit it --> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:weightSum="1" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.7" 
     android:orientation="vertical" > 
     <!-- replaced width with 0dp also here --> 

     <TextView 
      android:id="@+id/currencyNameTV" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="15dp" 
      android:text="text"/> 

     <TextView 
      android:id="@+id/currencyCodeTV" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="15px" 
      android:textSize="18dp" 
      android:text="text"/> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.3" 
     android:orientation="vertical" 
     android:layout_gravity="center_horizontal" > 

     <TextView 
      android:id="@+id/currencyRateTV" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:text="text" 
      android:textSize="30dp" 
      android:layout_marginLeft="15px" 
      android:layout_marginTop="15px" 
      android:gravity="center_horizontal" /> 

    </LinearLayout> 

</LinearLayout> 
+0

Wypróbuje to teraz dzięki Misley – domster

+0

OMG IT WORKS. DZIĘKUJEMY NIEWŁAŚCIWIE !!! – domster

+0

@domster ahahah witamy, dodałem wyjaśnienia wewnątrz układu jako komentarze, więc sprawdź je, aby uzyskać bardziej kompletną odpowiedź :) –

1

Jest to problem związany z ważeniem podanych widoków tekstu w układzie. Widoki tekstowe przycinają się ze względu na wagę ... nie trzeba dodawać wagi .. po prostu usuń ją i podaj wysokość jako "zawartość wrap".