के भीतर टेबललेआउट की अंतिम पंक्ति तक स्क्रॉल करें, मैं स्क्रॉलव्यू के अंदर एक टेबललेआउट का उपयोग करके उपयोगकर्ता इंटरैक्शन के परिणामस्वरूप समय के साथ पंक्तियों के साथ एक गतिशील तालिका रखना चाहता हूं। यह ठीक काम करता है, लेकिन जब मैं का उपयोग कर तालिका के अंत तक स्क्रॉल करना चाहता हूं, तो यह हमेशा अंतिम पंक्ति को छोड़ देता है; यानी, यह स्क्रॉल करता है ताकि अंतिम व्यक्ति से पहले एक दिखाई दे। मैन्युअल रूप से स्क्रॉल करते समय अंतिम पंक्ति दिखाई देती है, और स्क्रॉलबार भी सही है।स्क्रॉलव्यू
मैं निश्चित रूप से सुझावों के लिए खुला हूं कि इस से बेहतर लेआउट कैसे बनाया जाए; लेकिन मुझे विशेष रूप से समझने में दिलचस्पी है कि fullScroll()
इस तरह से व्यवहार क्यों करता है। क्या मुझे इसे एक अलग पैरामीटर देना चाहिए, या पूरी तरह से कुछ और उपयोग करना चाहिए? या ऐसा करता है क्योंकि नई गयी लाइन अभी तक किसी भी तरह दिखाई नहीं दे रही है? (यदि हां, तो मैं इसे कैसे हल कर सकता हूं?) या क्या मुझे कुछ और स्पष्ट बात याद आई?
TestActivity.java:
package com.example.android.tests;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class TestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button) findViewById(R.id.AddRow)).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Random rnd = new Random();
TableRow nr = new TableRow(v.getContext());
for (int c=0; c<3; c++) {
TextView nv = new TextView(v.getContext());
nv.setText(Integer.toString(rnd.nextInt(20)-10));
nr.addView(nv);
}
((TableLayout) findViewById(R.id.Table)).addView(nr);
// Scrolls to line before last - why?
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
}
});
}
}
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:text="Add Row"
android:id="@+id/AddRow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
<ScrollView
android:id="@+id/TableScroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/AddRow"
android:layout_alignParentTop="true" >
<TableLayout
android:id="@+id/Table"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="0,1,2" />
</ScrollView>
</RelativeLayout>
संपादित करें: संदर्भ के लिए, मैं कार्यान्वित Romain Guy के
निम्नलिखित कोड समस्या प्रतिकृति निम्नानुसार समाधान:
TestActivity.java में, बदल देते हैं:
// Scrolls to line before last - why?
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
साथ:
// Enqueue the scrolling to happen after the new row has been layout
((ScrollView) findViewById(R.id.TableScroller)).post(new Runnable() {
public void run() {
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
}
});
कौन सा ठीक काम करता है।
धन्यवाद - यह उन चीजों में से एक था जिस पर मुझे संदेह था लेकिन उन्हें कोई वास्तविक विचार नहीं था कि यह ठीक करना आसान होगा। थ्रेड से संबंधित सब कुछ के डर को ठीक करने में मेरी मदद करने के लिए धन्यवाद :-) – Joubarc