PDA

View Full Version : بازکردن فایل متنی در تکست ویو



nargesjooon
سه شنبه 19 آبان 1394, 16:42 عصر
سلام :لبخندساده:
من ی برنامه دارم مینویسم ک ی برنامه کتابخونه ای هسش(ینی همه ش متن و مطلب هسش)
این برنامه من دارای چن صفحه فهرست بندی شده هس!
ینی فهرست 1 شامل لیستی از ی موضوع هسش
فهرست 2 شامل لیستی از ی موضوع دیگ هسش!:اشتباه:
بعنوان مثال فهرست1من شامل20 ایمیج ویو هسش ک هرکدوم با کلیک ب صفحه مورد نظر خودشون میرن!
تو هر صفحه موردنظرشون من 2 تا تکست ویو (یکی شامل عنوان و دیگری شامل متن) و 1 ایمیج ویو(ک شامل عکس مربوط ب موضوع هسش) دارم.!:افسرده:
حالا من مطلب های مربوط ب متن های هر صفحه رو داخل فایل هایtxt جداگانه ریختم
و در پوشه ای بعنوان raw ذخیره کردم.
چجوری می تونم تکست ویو های مربوط ب متن را ب فایل های متنی ارجاع بدم!
تو نت گشتم و ی سری کد پیدا کردم برا همین خاطر کد ها رو میزارم تا کمکم کنی



public class Input_Text {




//String data = input_text.readTextFile(this, R.raw.a);

public static String readTextFile(Context ctx, int resId)
{
InputStream inputStream = ctx.getResources().openRawResource(resId);
InputStreamReader inputreader = new InputStreamReader(inputStream);
BufferedReader bufferedreader = new BufferedReader(inputreader);
String line;
StringBuilder stringBuilder = new StringBuilder();
try
{
while (( line = bufferedreader.readLine()) != null)
{
stringBuilder.append(line);
stringBuilder.append('\n');
}
}
catch (IOException e)
{
return null;
}
return stringBuilder.toString();
}
}




این کد بالا مربوط میشه ب فایل جاوا برای ارجاع فایل متنی!
این کد پایین هم مربوط میشه ب ارجاع کلاس بالا


public class MainActivity extends Activity {
TextView txv;
String data;
Typeface face;


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


data = input_text.readTextFile(MainActivity.this, R.raw.android);
face = Typeface.createFromAsset(getAssets(), "f.TTF" + "");
txv = (TextView) this.findViewById(R.id.textView);
txv.setTypeface(face);
txv.setText(data);



مشکل من اینجاس ک این کد بالا اگ دقت کنی در لیوت activity_main هسش!
اما اون تکست ویوهای شامل متن برنامه من در لیوت دیگ هسن برا همین خاطر نمیدونم باید چیکارکنم!
این کد پایین هم مربوط میشه ب کلاس جاوایی ک اون لیوت های متن های من داخلش هسن!

public class Next_Zevashoiee extends Activity {
String data;
Typeface face;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

int selectedImageNumber = //shomare tasviri ke entekhab shode
getIntent().getExtras().getInt("shomare_tasvir");

switch (selectedImageNumber) {
case 1:

setContentView(R.layout.zenashoiee_1);

break;
case 2:
setContentView(R.layout.zenashoiee_2);
break;
case 3:
setContentView(R.layout.zenashoiee_3);
break;
case 4:
setContentView(R.layout.zenashoiee_4);
break;
case 5:
setContentView(R.layout.zenashoiee_5);
break;
case 6:
setContentView(R.layout.zenashoiee_6);
break;
case 7:
setContentView(R.layout.zenashoiee_7);
break;
case 8:
setContentView(R.layout.zenashoiee_8);
break;
case 9:
setContentView(R.layout.zenashoiee_9);
break;
case 10:
setContentView(R.layout.zenashoiee_10);
break;
case 11:
setContentView(R.layout.zenashoiee_11);
break;
case 12:
setContentView(R.layout.zenashoiee_12);
break;
case 13:
setContentView(R.layout.zenashoiee_13);
break;
case 14:
setContentView(R.layout.zenashoiee_14);
break;
case 15:
setContentView(R.layout.zenashoiee_15);
break;
case 16:
setContentView(R.layout.zenashoiee_16);
break;
case 17:
setContentView(R.layout.zenashoiee_17);
break;
case 18:
setContentView(R.layout.zenashoiee_18);
break;
case 19:
setContentView(R.layout.zenashoiee_19);
break;
case 20:
setContentView(R.layout.zenashoiee_20);
break;


}


الان تکست ویوهای متن من در R.layout.zenashoiee_1 تا R.layout.zenashoiee_20 هسن!
دیگ واضح تر از این نمیتونسم بگم!

ESMAIL.PERFECT
سه شنبه 19 آبان 1394, 23:38 عصر
فک نمیکنم این همه توضیحی که دادید واقعا لازم باشه!

بعد از معرفی تکست ویویی که متن رو قراره نمایش بده:


TextView tvname = (TextView) findViewById(R.id.textview);

String displayMatn = "";
InputStream matnr = null;
matnr = getResources().openRawResource(R.raw.txtfile);

int fileLen = 0;
try {
fileLen = matnr.available();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] fileBuffer = new byte[fileLen];
try {
matnr.read(fileBuffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
matnr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
displayMatn = new String(fileBuffer);
urtvname.setText(displayMatn);


txtfile و urtvname رو جایگزین کنید.

msroid
سه شنبه 19 آبان 1394, 23:58 عصر
تمام این کارا رو میشه با دوتا Activity و دو تا Layout انجام داد.



public class BookLists extends Activity {
private ListView mainListView;
private ArrayAdapter<String> listAdapter;

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

mainListView = (ListView) findViewById(R.id.listView1);

// Create and populate a List of planet names.
final String[] planets = new String[]{"zanashooii1", "zanashooii2", "zanashooii3"};

// Create ArrayAdapter using the planet list.
listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, planets);
mainListView.setAdapter(listAdapter);

mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(BookLists.this, BooksDetails.class);
intent.putExtra("title", planets[position]);
startActivity(intent);
}
});
}
}



و در Activity دوم جزئیات رو نشون میدین:




public class BooksDetails extends Activity {
private TextView txtTitle, txtDescription;
private InputStream inputStream;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book_details);
txtTitle = (TextView) findViewById(R.id.txtTitle);
txtDescription = (TextView) findViewById(R.id.txtDescription);

String title = getIntent().getStringExtra("title");
txtTitle.setText(title);

switch (title) {
case "zanashooii1":
inputStream = getResources().openRawResource(R.raw.zanashooii1);
break;
case "zanashooii2":
inputStream = getResources().openRawResource(R.raw.zanashooii2);
break;
case "zanashooii3":
inputStream = getResources().openRawResource(R.raw.zanashooii3);
break;
}
InputStreamReader inputreader = new InputStreamReader(inputStream);
BufferedReader bufferedreader = new BufferedReader(inputreader);
String line;
StringBuilder builder = new StringBuilder();
try {
while ((line = bufferedreader.readLine()) != null) {
builder.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
txtDescription.setText(builder.toString());
}
}

nargesjooon
پنج شنبه 21 آبان 1394, 18:02 عصر
فک نمیکنم این همه توضیحی که دادید واقعا لازم باشه!

بعد از معرفی تکست ویویی که متن رو قراره نمایش بده:


TextView tvname = (TextView) findViewById(R.id.textview);

String displayMatn = "";
InputStream matnr = null;
matnr = getResources().openRawResource(R.raw.txtfile);

int fileLen = 0;
try {
fileLen = matnr.available();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte[] fileBuffer = new byte[fileLen];
try {
matnr.read(fileBuffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
matnr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
displayMatn = new String(fileBuffer);
urtvname.setText(displayMatn);


txtfile و urtvname رو جایگزین کنید.
خو الان ی سوال؟
من مثلا 100 تکست ویو برای نشون دادن متن هام دارم و 100 تا فایل txt رو ب پوشه raw قرار دادم
حالا باید این 100 تکست ویو ها رو کجا قرار بدم؟

nargesjooon
پنج شنبه 21 آبان 1394, 18:26 عصر
تمام این کارا رو میشه با دوتا Activity و دو تا Layout انجام داد.



public class BookLists extends Activity {
private ListView mainListView;
private ArrayAdapter<String> listAdapter;

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

mainListView = (ListView) findViewById(R.id.listView1);

// Create and populate a List of planet names.
final String[] planets = new String[]{"zanashooii1", "zanashooii2", "zanashooii3"};

// Create ArrayAdapter using the planet list.
listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, planets);
mainListView.setAdapter(listAdapter);

mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(BookLists.this, BooksDetails.class);
intent.putExtra("title", planets[position]);
startActivity(intent);
}
});
}
}



و در Activity دوم جزئیات رو نشون میدین:




public class BooksDetails extends Activity {
private TextView txtTitle, txtDescription;
private InputStream inputStream;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book_details);
txtTitle = (TextView) findViewById(R.id.txtTitle);
txtDescription = (TextView) findViewById(R.id.txtDescription);

String title = getIntent().getStringExtra("title");
txtTitle.setText(title);

switch (title) {
case "zanashooii1":
inputStream = getResources().openRawResource(R.raw.zanashooii1);
break;
case "zanashooii2":
inputStream = getResources().openRawResource(R.raw.zanashooii2);
break;
case "zanashooii3":
inputStream = getResources().openRawResource(R.raw.zanashooii3);
break;
}
InputStreamReader inputreader = new InputStreamReader(inputStream);
BufferedReader bufferedreader = new BufferedReader(inputreader);
String line;
StringBuilder builder = new StringBuilder();
try {
while ((line = bufferedreader.readLine()) != null) {
builder.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
txtDescription.setText(builder.toString());
}
}


آخه من تازه اندروید نویسی کردم:ناراحت:
براهمین خاطر هنوز نمیتونم کدهامو از روش خلاصه استفاده کنم:لبخندساده:
براهمین خاطر الان گیج شدم ک چجوری باید این کدهای شما را اجرا کنم:افسرده:

msroid
پنج شنبه 21 آبان 1394, 19:28 عصر
آخه من تازه اندروید نویسی کردم:ناراحت:
براهمین خاطر هنوز نمیتونم کدهامو از روش خلاصه استفاده کنم:لبخندساده:
براهمین خاطر الان گیج شدم ک چجوری باید این کدهای شما را اجرا کنم:افسرده:


همین که شروع کردین خوبه منم خیلی وقت نیست کار میکنم. این راهی که دارین انجام میدین بهینه نیست. بهترین راه استفاده از پایگاه داده به جای استفاده از فایله.
من اون کد قبلی رو یکم تغییر دادم تا راحت تر بتونین کار کنین.
شما یه Activity اصلی دارین که یه Layout هم داره و داخل اون Layout یه ListView قرار دادین. توی اون اسامی هر موضوع رو به کاربر نمایش میدین. کاربر روی هر کدوم که تاچ کرد وارد اکتیویتی دوم میشه و اونجا همون عنوان به اضافه متن اصلی رو بهش نشون میدین.
توی اکتیویتی اصلی دوتا آرایه لازم دارین. آرایه اول که از نوع String هست عنوان موضوعات رو داخلش قرار میدین. در آرایه دوم که از نوع int هست آدرس هر فایل رو قرار میدین. مثلا اگه 100 تا موضوع دارین پس در هر دو آرایه باید 100 خونه داشته باشین. در اولی 100 موضوع و در دومی 100 آدرس. فقط باید به این نکته توجه کنین که اگه مثلا موضوع "دوستی" در آرایه اول در خونه 25 قرار گرفته در آرایه دوم هم باید خونه 25 شامل آدرس موضوع "دوستی" باشه...!!
و بقیه ماجرا هم که دیگه مشخصه.


public class BookLists extends Activity {
private ListView mainListView;
private ArrayAdapter<String> listAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book);

mainListView = (ListView) findViewById(R.id.listView1);

// Create and populate a List of planet names.
final String[] books = new String[]{"متن شماره یک", "متن شماره دو دو", "متن شماره سه"};

// files addresses
// R.raw.a1 ---> my first file name ---> a1.txt ---> متن شماره یک
final int[] fileID = {R.raw.a1, R.raw.a2, R.raw.a3};

// Create ArrayAdapter using the books list.
listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, books);
mainListView.setAdapter(listAdapter);

mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(BookLists.this, BooksDetails.class);

intent.putExtra("id", fileID[position]);
intent.putExtra("title", books[position]);

startActivity(intent);
}
});
}
}



و اینم اکتیویتی دوم که عنوان و متن اصلی رو نمایش میده:


public class BooksDetails extends Activity {
private TextView txtTitle, txtDescription;
private InputStream inputStream;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book_details);
txtTitle = (TextView) findViewById(R.id.txtTitle);
txtDescription = (TextView) findViewById(R.id.txtDescription);

String title = getIntent().getStringExtra("title");
txtTitle.setText(title);


int id = getIntent().getExtras().getInt("id");
inputStream = getResources().openRawResource(id);

InputStreamReader inputreader = new InputStreamReader(inputStream);
BufferedReader bufferedreader = new BufferedReader(inputreader);
String line;
StringBuilder builder = new StringBuilder();
try {
while ((line = bufferedreader.readLine()) != null) {
builder.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
txtDescription.setText(builder.toString());
}
}

nargesjooon
جمعه 22 آبان 1394, 17:21 عصر
همین که شروع کردین خوبه منم خیلی وقت نیست کار میکنم. این راهی که دارین انجام میدین بهینه نیست. بهترین راه استفاده از پایگاه داده به جای استفاده از فایله.
من اون کد قبلی رو یکم تغییر دادم تا راحت تر بتونین کار کنین.
شما یه Activity اصلی دارین که یه Layout هم داره و داخل اون Layout یه ListView قرار دادین. توی اون اسامی هر موضوع رو به کاربر نمایش میدین. کاربر روی هر کدوم که تاچ کرد وارد اکتیویتی دوم میشه و اونجا همون عنوان به اضافه متن اصلی رو بهش نشون میدین.
توی اکتیویتی اصلی دوتا آرایه لازم دارین. آرایه اول که از نوع String هست عنوان موضوعات رو داخلش قرار میدین. در آرایه دوم که از نوع int هست آدرس هر فایل رو قرار میدین. مثلا اگه 100 تا موضوع دارین پس در هر دو آرایه باید 100 خونه داشته باشین. در اولی 100 موضوع و در دومی 100 آدرس. فقط باید به این نکته توجه کنین که اگه مثلا موضوع "دوستی" در آرایه اول در خونه 25 قرار گرفته در آرایه دوم هم باید خونه 25 شامل آدرس موضوع "دوستی" باشه...!!
و بقیه ماجرا هم که دیگه مشخصه.


public class BookLists extends Activity {
private ListView mainListView;
private ArrayAdapter<String> listAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book);

mainListView = (ListView) findViewById(R.id.listView1);

// Create and populate a List of planet names.
final String[] books = new String[]{"متن شماره یک", "متن شماره دو دو", "متن شماره سه"};

// files addresses
// R.raw.a1 ---> my first file name ---> a1.txt ---> متن شماره یک
final int[] fileID = {R.raw.a1, R.raw.a2, R.raw.a3};

// Create ArrayAdapter using the books list.
listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, books);
mainListView.setAdapter(listAdapter);

mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(BookLists.this, BooksDetails.class);

intent.putExtra("id", fileID[position]);
intent.putExtra("title", books[position]);

startActivity(intent);
}
});
}
}



و اینم اکتیویتی دوم که عنوان و متن اصلی رو نمایش میده:




public class BookLists extends Activity {
private ListView mainListView;
private ArrayAdapter<String> listAdapter;


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


mainListView = (ListView) findViewById(R.id.listView1);


// Create and populate a List of planet names.
final String[] books = new String[]{"متن شماره یک", "متن شماره دو", "متن شماره سه"};
final int[] fileID = {R.raw.a1, R.raw.a2, R.raw.a3};

// Create ArrayAdapter using the books list.
listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, books);
mainListView.setAdapter(listAdapter);


mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(BookLists.this, BooksDetails.class);
intent.putExtra("id", fileID[position]);
intent.putExtra("title", books[position]);
startActivity(intent);
}
});
}
}

ممنون داداشی
خیلی کمکت مفید بود برام
اجرکم عندالله:لبخندساده:

msroid
شنبه 23 آبان 1394, 16:35 عصر
ممنون داداشی
خیلی کمکت مفید بود برام
اجرکم عندالله:لبخندساده:

اکتیویتی اول اشتباها جای اکتیویتی دوم هم کپی شده بود که اصلاحش کردم.

محمد آشتیانی
شنبه 23 آبان 1394, 22:55 عصر
سلام دوستان
انشاالله در آینده نزدیک جلوی فعالیت های این سبکی رو خواهیم گرفت ، اما تا اون روز کمی صبور باشید و پست فاقد محتوا ارسال نکنید.
نهایتا جواب ندید اگر فکر می کنید یک جای کار میلنگه.


سپاسگذارم.

پ ن: تصویر پروفایل ویرایش شد